我正在使用MSTest,我希望一次为测试类中的所有方法设置相同的测试类别,而无需单独为每个方法设置TestCategory属性。怎么办呢?
最方便和最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。
最终目标是在TFS签到测试运行期间跳过集成测试。
答案 0 :(得分:5)
我一直在寻找类似的东西,而且我已经找到了一个非常适合我的目的的解决方案。
不解决了基于每个类应用TestCategory的问题,但您可以使用/test:
命令行参数{{ 1}}指定搜索字符串以匹配测试的 完全限定方法名称的任何部分。这意味着您通常可以匹配类,命名空间或您可以到达的任何匹配目标测试的搜索字符串。如果没有这样做,您可以多次使用mstest
参数。即:
/test:
修改强>
现在可以在MSTest V2中添加类级别的> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace
/test:My.FullyQualified.OtherNamespace.OtherClass
属性,如下面的NomadeNumerique的答案中所述。 Details
答案 1 :(得分:4)
最终目标是在TFS的测试运行期间跳过集成测试 入住。
还有其他方法可以做到这一点。在您的TFS版本中,you can set which unit tests you want to run, depending on their assembly name.
作为默认行为,它将在名称中包含“test”的程序集中运行所有单元测试。一个简单的解决方法是将集成测试重命名为不包含“test”的内容。
如果您确实想使用类别,可以尝试使用AOP。例如,使用Postsharp,您可以在集成测试程序集中创建puts the attribute on the method的方面。如果所有测试都分组在一个dll或每个集成测试类中,则为集成组件中的所有公共方法启用方面。
答案 2 :(得分:4)
为了能够在类级别设置[TestCategory]
属性,请使用NuGet安装“MSTest V2”TestFramework。
答案 3 :(得分:2)
解决此限制的一种方法是将测试类别放在每个测试方法的开头。例如,命名单元测试
public void UnitTestDoSomething_ExpectThis()
和您的集成测试
public void IntegrationTestDoSomething_ExpectThis()
然后,当您执行TFS查询以获得集成测试时,您可以执行
Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]
虽然这不是一个完美的解决方案,但它可以帮助您区分代码和TFS中的测试。或者,您可以查看区域和迭代路径。
答案 4 :(得分:2)
您可以分组"班级名称"进入Test Explorer面板。
使用测试TestCategory属性,您无法解决您的问题,因为C#中的属性是元数据,不能用作动态值。
答案 5 :(得分:0)
在VS 2017中,这是可能的(并且似乎是VS2012 update 1的一部分)。
您可以将[TestCategory(“ Integration”)]放在单元测试中的某个类上,并将其应用于所有测试,同样,将[TestCategory(“ Unit”)]应用于您的单元测试类。
然后,您可以使用测试资源管理器的搜索栏按特征名称=单位进行过滤,“全部运行”将仅运行与您的搜索匹配的测试。
当您在构建服务器上运行这些测试时,可以使用/ category:Unit之类的开关仅运行单元测试。