1

在 XUnit 测试项目中,当测试不在 DotMemory Unit 下运行时,我希望跳过必须使用 DotMemory Unit 运行的理论。

目前我正在使用 dotMemoryApi 强制理论失败,根据以下代码段:

[Theory]
[MemberData(nameof(SomeTestData)]
public void MyTheory(object someData)
{
   if (!dotMemoryApi.IsEnabled)
   {
       Assert.True(false, "DotMemory API not enabled");
   }
   // otherwise, proceed with dotMemory unit test calls 
}

这行得通,但我宁愿在不使用 DotMemory Unit 运行时跳过该理论,而不是失败。

我已经尝试过SkippableFact nuget package,但是在 DotMemory Unit 下运行时失败,但出现以下异常:

DotMemoryUnitException : dotMemory Unit 方法是从 >test 方法外部调用的: - 如果您使用的是不支持开箱即用的单元测试运行器,那么可能对 dotMemory Unit 的调用是从 >DotMemoryUnitController TestStart() 和TestEnd() 方法或这些方法 > 以错误的顺序调用。了解有关 DotMemoryUnitController >类的更多信息:https ://www.jetbrains.com/help/dotmemory-unit/3.0/Working_with_Unsupported_Unit_Testing_Frameworks.html

我也尝试过扩展 XUnit.TheoryAttribute 类,如下所示,这确实会导致理论被跳过,但不幸的是,即使使用 dotMemoryUnit 运行它也会跳过测试。

public sealed class IgnoreOnDotMemoryNotEnabledTheory : TheoryAttribute
{
    public IgnoreOnDotMemoryNotEnabledTheory() {
        if(!dotMemoryApi.IsEnabled)
        {
            Skip = "Ignored due to DotMemory API not enabled"
        }
    }
}

有什么想法吗?

4

2 回答 2

0

在这种情况下,当我有“仅内存”测试没有任何意义而没有 dotMemory 单元时,我用一个类别标记它们(例如 [Category("MemoryOnly")] 并在运行所有测试时排除该类别。我使用 NUnit但可以肯定的是没有太大区别。

于 2019-07-31T14:37:34.977 回答
0

事实证明,SkippableFact NuGet 库中包含一个 SkippableTheory 属性。我一定错过了它,因为它不在项目自述文件中。

使用示例:

[SkippableTheory]
[MemberData(nameof(SomeTestData)]
public void MyTheory(object someData)
{
  skip.IfNot(dotMemoryApi.IsEnabled);

  // otherwise, proceed with dotMemory unit test calls 
  .
  .
  .
于 2019-09-18T23:27:48.133 回答