Visual Studio 2017 实时测试排除项

4
我正在查看新版Visual Studio中的实时测试功能(我正在使用NUnit)。
有一个“排除”选项用于单元测试,表示不应运行特定测试(也许它们是集成测试、慢速测试或其他类型的测试)。

enter image description here

这些信息存储在哪里?我在csproj或其他地方都没有看到任何指示表明测试不应包含在Live Testing中。难道不应该有一些信息文件可以放在源代码控制中,以便我的团队不必手动指定哪些测试不应该被Live Testing运行吗?
2个回答

5

包含/排除是一个用户级别的功能。当您想要为特定的编辑会话运行一组特定的测试或保留自己的个人偏好时,这非常有用。为了防止测试运行并保留该信息,您可以执行以下操作:

[ExcludeFromCodeCoverage]
public class SkipLiveFactAttribute : FactAttribute
{
    private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == "Microsoft.CodeAnalysis.LiveUnitTesting.Runtime");

    public override string Skip => s_lutRuntimeLoaded ? "Test excluded from Live Unit Testing" : "";
}

public class Class1
{
    [SkipLiveFact]
    public void F()
    {
        Assert.True(true);
    }
}

这似乎不起作用。我在测试方法和测试夹具上都尝试了 [ExcludeFromCodeCoverage]。但是测试仍然运行。 - Matthew Groves
1
是的,这只是防止可视化,测试仍然会运行。这可能有所帮助: [ExcludeFromCodeCoverage] public class SkipLiveFactAttribute : FactAttribute { private static bool s_lutRuntimeLoaded = AppDomain.CurrentDomain.GetAssemblies().Any(a => a.GetName().Name == "Microsoft.CodeAnalysis.LiveUnitTesting.Runtime"); public override string Skip => s_lutRuntimeLoaded ? "从实时单元测试中排除测试" : ""; }public class Class1 { [SkipLiveFact] public void F() { Assert.True(true); } } - Manish Jayaswal
2
我已经更新了上面的答案,并删除了关于ExcludeFromCodeCoverageAttribute的不正确文本。 - Manish Jayaswal
那个解决方案对于xUnit有效(我想)。我在使用NUnit,但我想象可以编写类似的东西。我希望有一种通用的方法来实现这个,而不是针对特定的测试框架。 - Matthew Groves
谢谢,我正在寻找ExcludeFromCodeCoverage属性!! - Phil

3

您现在可以使用以下属性在源代码中指定要从实时单元测试中排除的目标测试方法:

For xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
For NUnit: [Category("SkipWhenLiveUnitTesting")]
For MSTest: [TestCategory("SkipWhenLiveUnitTesting")]

Offical Docs here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接