52

我们有在每小时生产中自动运行的 MSTest 测试。其中一项测试标有[Ignore]属性,因为它还没有准备好在我们的生产环境中运行它。
现在我想(仅)在我的本地环境中开始该测试,因为我的本地环境已准备好进行该测试。
我尝试通过单击测试代码左侧的 ReSharper 图标或单击单元测试会话窗口 中的运行选定测试图标来运行该测试,但没有任何反应。

我目前通过注释掉该[Ignore]行来修复它。但现在我需要注意//在签入代码之前删除注释字符 ( )。

是否有另一种方法可以临时运行[Ignore]'d 测试?

4

4 回答 4

48

最近,当我遇到此类问题时,我将一个新的构建配置添加到名为“本地开发人员调试”之类的 Visual Studio 项目中,并使用现有调试配置中的设置。然后我转到“Project -> MyProjectName Properties -> Build”,确保“Local Developer Debug”是选定的配置,并将“LOCALDEVBUILD”添加到“Conditional compliation symbols”。这允许使用预处理器指令在编译时“切换”代码:

#if (!LOCALDEVBUILD)
    [Ignore]
#endif

不确定这是否是您要查找的内容...但它允许您根据构建的意图运行/使用特定代码(通过构建配置)...使用此方法,您可以忽略测试更多“官方”构建,但如果您愿意,仍然可以在闲暇时执行它。

于 2012-04-12T08:54:35.293 回答
36

您还可以使用测试类别来标记您不想包含在自动化测试中的测试方法,例如

[TestCategory("IgnoreOnBuild")]

因此不使用该[Ignore]属性。并将其与构建定义中的过滤器结合起来,在 Basic -> Automated Test -> Test Source -> Test Case Filter 下:

TestCategory!=IgnoreOnBuild
于 2014-06-10T11:25:42.910 回答
3

看起来还有其他方法可以使用 testrunco​​nfig 文件启用/禁用测试。但是,如果您使用 IgnoreAttribute,它会与代码一起编译,因此无法轻松切换。

文档中:

单元测试的 Ignore 属性与测试的其他属性和源代码一起位于单元测试的源文件中。这意味着,如果您在“测试管理器”窗口中禁用单元测试,然后使用 MSTest.exe 命令行实用程序运行该测试,该测试仍会运行。但是,如果使用 Ignore 属性标记单元测试,编译程序集,然后使用 MSTest.exe 运行测试,则不会运行测试。它不会运行,因为 Ignore 属性已成为测试的一部分。

于 2012-04-12T08:42:36.440 回答
0

正如@Lasse 提到的,可以设置[TestCategory("DockerEnvironmentRequired")]. 除此之外,您可以在本地 .runsettings 中设置一个过滤器,包括或排除具有指定 TestCategory 的测试。

示例测试:

[TestClass]
[TestCategory("DockerEnvironmentRequired")]
public class MyTests
{
    [TestMethod]
    public async Task XXX_ShouldSuccess()
    {
        ...
    }
}

示例外部构建环境 .runsettings:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <TestRunParameters>
        ...
    </TestRunParameters>
    <RunConfiguration>
        <TestCaseFilter>TestCategory!=DockerEnvironmentRequired</TestCaseFilter>
    </RunConfiguration>
</RunSettings>

在本地,您将删除 .runsettings 中的 TestCaseFilter节点以运行它们。

使用 CLI 替代: dotnet test --filter TestCategory!=DockerEnvironmentRequired

于 2021-11-16T14:53:38.513 回答