如何为类中的所有测试设置测试类别
本文关键字:测试 设置 测试类 | 更新日期: 2023-09-27 18:07:26
我正在使用MSTest,并且我想要一次为测试类中的所有方法设置相同的测试类别,而不需要为每个方法单独设置TestCategory属性。如何做到这一点?
最方便和明显的方法是在类上设置TestCategory属性,但它只能应用于方法。
最终目标是在TFS签入的测试运行期间跳过集成测试。
为了能够在class级别设置[TestCategory]
属性,请使用NuGet安装" MSTest V2 " TestFramework。
裁判:https://blogs.msdn.microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/
我一直在寻找做类似的事情,我已经到达了一个解决方案,非常适合我的目的。
这并不解决了在每个类的基础上应用TestCategory的问题,但是您可以使用/test:
命令行参数为mstest
指定一个搜索字符串来匹配完全限定方法名称的任何部分。这意味着您通常可以匹配类、名称空间或您可以到达的任何与目标测试匹配的搜索字符串。如果那样不行,你可以多次使用/test:
参数。即:
> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace
/test:My.FullyQualified.OtherNamespace.OtherClass
更多信息编辑:
在类级别添加TestCategory
属性现在可以在MSTest V2中使用,如下面的NomadeNumerique的回答所述。细节
最终目标是在TFS上运行测试期间跳过集成测试登机手续。
还有其他方法可以做到这一点。在TFS构建中,您可以根据单元测试的程序集名称设置要运行的单元测试。
作为默认行为,它将运行名称中包含"test"的程序集中的所有单元测试。一个简单的修复方法是将集成测试重命名为不包含"test"的名称。
如果你确实想使用类别,你可以尝试使用AOP。例如,使用Postsharp,您可以在集成测试程序集中创建一个方面,将属性放在方法上。如果所有测试都分组在一个dll中或每个集成测试类中,则为集成程序集中的所有公共方法启用方面。
绕过此限制的一种方法是将测试类别放在每个测试方法的开头。例如,将单元测试命名为
public void UnitTestDoSomething_ExpectThis()
和您的集成测试
public void IntegrationTestDoSomething_ExpectThis()
然后当您执行TFS查询以获得集成测试时,您可以执行
Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]
虽然这不是一个完美的解决方案,但它将帮助您区分代码测试和TFS测试。或者,您可以查看区域和迭代路径。
您可以按"类名"分组到Test Explorer面板。
使用TestCategory属性你不能解决你的问题,仅仅因为c#中的属性是元数据,不能用作动态值
在vs2017中这是可能的(并且看起来是VS2012更新1的一部分)。
你可以把[TestCategory("Integration")]放在单元测试中的一个类上,并让它应用于所有的测试,同样地,[TestCategory(" unit ")]放在单元测试类上。
然后您可以使用Test Explorer的搜索栏根据Trait名称= Unit进行过滤,并且"运行所有"将只运行与您的搜索匹配的测试。
当您要在构建服务器上运行这些测试时,您可以使用/category:Unit之类的开关来只运行单元测试。