在 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"
}
}
}
有什么想法吗?