我正在从NUnit过渡到XUnit(在C#中),我正在编写一些“集成测试”(IT),我不一定希望测试运行器作为自动构建过程的一部分运行。我通常这样做是为了手动测试,当完整的端到端流程因环境因素(缺少数据等)而无法工作时
在NUnit中,您可以使用Explicit attribute标记测试,并且测试运行符会跳过它(除非您使用特定的Category attribute标记测试并告诉测试运行器将其作为目标明确的类别)。
XUnit是否有类似的方法从测试运行器中排除测试?
答案 0 :(得分:14)
我想我found it。显然,您可以修改[Fact]
属性,如下所示:[Fact(Skip="reason")]
。这将跳过测试,但是如果不将属性恢复正常,您将无法手动运行它。
我一直在寻找更好的方法。
答案 1 :(得分:14)
Jimmy Bogard用一个很好的RunnableInDebugOnlyAttribute解决了这个问题。请参阅此博文:Run tests explicitly in xUnit.net
public class RunnableInDebugOnlyAttribute : FactAttribute
{
public RunnableInDebugOnlyAttribute()
{
if (!Debugger.IsAttached)
{
Skip = "Only running in interactive mode.";
}
}
}
答案 2 :(得分:1)
我用过
#if DEBUG
// Must test manually with https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
[Fact]
#endif
因此,这甚至不算是构建服务器上的测试,而通常构建调试版本的开发人员会注意到该测试失败
答案 3 :(得分:0)
我希望有更好的方法来做到这一点。我也有一堆我想保留的“性能”类型测试,以便我可以手动运行它们,但我不希望它们由测试运行器自动运行。我正在使用的解决方案(我不喜欢它)是改变
[Fact]
到 //[事实]
我不喜欢这个解决方案的主要原因是当我想手动运行测试时它需要一个额外的步骤,即我必须先取消对 [Fact]
的注释。但它确实对我有用,尽管有点笨拙。
我真正想要的是一种将测试作为测试进行营销但只能手动调用而不能由测试运行器调用的方法。但我还没有找到办法做到这一点。
答案 4 :(得分:-1)