我使用的是MSTest,我希望为测试类中的所有方法一次设置相同的测试类别,而无需单独为每个方法设置TestCategory属性。如何才能做到这一点?如何为类中的所有测试设置测试类别
最方便,最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。
最终目标是在TFS签入的测试运行期间跳过集成测试。
我使用的是MSTest,我希望为测试类中的所有方法一次设置相同的测试类别,而无需单独为每个方法设置TestCategory属性。如何才能做到这一点?如何为类中的所有测试设置测试类别
最方便,最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。
最终目标是在TFS签入的测试运行期间跳过集成测试。
解决此限制的一种方法是将测试类别放入每个测试方法的开头。例如,命名你的单元测试
public void UnitTestDoSomething_ExpectThis()
和你的集成测试
public void IntegrationTestDoSomething_ExpectThis()
然后,当你做你的TFS查询来获取集成测试,你可以做
Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]
虽然这不是一个完美的解决方案,它将帮助您区分代码和TFS中的测试。或者,您可以查看区域和迭代路径。
但你如何处理多个类别? – Dagrooms 2017-05-17 20:06:16
您可以按“类名称”分组到Test Explorer面板。
通过测试TestCategory属性,仅仅因为C#中的属性是元数据并且不能用作动态值,您无法解决您的问题。
最终目标是在TFS 签入的测试运行期间跳过集成测试。
还有其他的方法可以做到这一点。在您的TFS版本中,you can set which unit tests you want to run, depending on their assembly name.
作为默认行为,它将在名称中包含“test”的程序集中运行所有单元测试。一个简单的解决方法是将你的集成测试重新命名为不包含“测试”的东西。
如果你想使用类别,你可以尝试使用AOP。例如,使用Postsharp,您可以在集成测试程序集中创建一个方面,该方面为puts the attribute on the method。然后,如果所有测试分组在一个dll或每个集成测试类中,则为集成程序集中的所有公用方法启用该方面。
我一直在寻找类似的东西,而且我已经找到了一个解决方案,可以很好地满足我的需求。
这并不不解决在每个阶级基础应用TestCategory,的问题,但可以使用/test:
命令行参数mstest
指定搜索字符串相匹配的充分的任何部分合格方法名称的测试。这意味着您通常可以匹配类或名称空间,或者您可以到达的任何搜索字符串,以匹配目标测试。如果不这样做,您可以多次使用/test:
参数。即:
> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace
/test:My.FullyQualified.OtherNamespace.OtherClass
有趣。不要认为有可能在类中使用TFS测试标记所有方法。 TFS理解TestCategory和Priority,这些属性只是方法特定的。您可以将集成测试移至独立的项目,并指示TFS不运行它。 – nikita 2013-04-05 12:34:29
你可以将你的单元和集成测试分成两个不同的程序集,然后相应地配置你的构建? – 2013-04-05 14:35:46
好吧,我们有几十个库,每个库都有一个相应的测试库,可能包含单元测试和集成测试。将它们中的每一个拆分为单元库和集成测试库是可能的,但看起来并不像最优雅的方法。 – alex 2013-04-05 16:33:36