【问题标题】:Ignore IgnoreAttribute忽略忽略属性
【发布时间】:2021-11-22 22:47:55
【问题描述】:

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

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

还有其他方法可以临时运行[Ignore]'d 测试吗?

【问题讨论】:

  • 奇怪的是,这在我们之前从未发生过。使用 VS2010 和 R#6,我们可以执行忽略的测试,单击代码上方的左球并执行“运行”。

标签: c# mstest resharper-5.1


【解决方案1】:

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

#if (!LOCALDEVBUILD)
    [Ignore]
#endif

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

【讨论】:

    【解决方案2】:

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

    [TestCategory("IgnoreOnBuild")]
    

    因此不使用[Ignore] 属性。并将其与构建定义中的过滤器结合起来,在基本 -> 自动测试 -> 测试源 -> 测试用例过滤器下:

    TestCategory!=IgnoreOnBuild
    

    【讨论】:

    • 在 Visual Studio 测试管理器窗口中,您可以过滤 Trait:"IgnoreOnBuild"(使用 -Trait:"IgnoreOnBuild" 排除它们)
    • Basic -> Automated Test -> Test Source -> Test Case Filter: 在哪里?这是什么顶级菜单或上下文菜单?
    【解决方案3】:

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

    来自documentation

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

    【讨论】:

    • OP 想要这个功能的反面。这只允许人们在本地忽略测试,但在自动化测试期间不能忽略它。 OP 希望在自动化测试期间继续忽略该测试,而不是在本地忽略它。
    • @Alain 这不是真的。使用[Ignore] 装饰测试会将装饰编译到程序集中,无论在何处或如何运行测试(本地机器、手动启动或测试运行器、自动管道部署到共享环境等)都被忽略测试将被排除。
    【解决方案4】:

    正如@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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2011-07-19
      • 2013-01-18
      • 2013-08-29
      • 1970-01-01
      相关资源
      最近更新 更多