如何设置class级中所有考试的考试分类

我正在使用MSTest ,我想一次为testing类中的所有方法设置相同的testing类别,而不是单独为每个方法设置TestCategory属性。 如何才能做到这一点?

最方便,最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。

最终目标是在TFS签入的testing运行期间跳过集成testing。

我一直在寻找类似的东西,而且我已经find了一个对我来说非常有用的解决scheme。

这并不能解决在每个类上应用TestCategory的问题, 但是您可以使用mstest/test:命令行参数指定一个searchstring来匹配testing的全限定方法名称的任何部分。 这意味着你通常可以匹配类或命名空间,或任何可以到达的searchstring匹配目标testing。 如果不这样做,可以多次使用/test:参数。 即:

 > mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace /test:My.FullyQualified.OtherNamespace.OtherClass 

更多信息

最终目标是在TFS签入的testing运行期间跳过集成testing。

还有其他方法可以做到这一点。 在您的TFS构build中, 您可以根据组件名称来设置要运行的unit testing。

作为默认行为,它将在名称中包含“test”的程序集中运行所有unit testing。 一个简单的解决方法是将你的集成testing重命名为不包含“testing”的东西。


如果你想使用类别 ,你可以尝试使用AOP。 例如,使用Postsharp,您可以在集成testing程序集中创build一个方面, 将该属性放在方法上 。 然后,如果所有testing分组在一个dll中或每个集成testing类上,则为集成程序集中的所有公用方法启用方面。

解决这个限制的一个方法是把testing类别放在每个testing方法的开始。 例如,命名你的unit testing

 public void UnitTestDoSomething_ExpectThis() 

和你的整合testing

 public void IntegrationTestDoSomething_ExpectThis() 

然后,当你做你的TFS查询来获得集成testing,你可以做

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

虽然这不是一个完美的解决scheme,但它将帮助您区分代码和TFS中的testing。 或者,您可以查看区域和迭代path。

您可以按“类名”分组到“testing浏览器”面板中。

通过testingTestCategory属性,仅仅因为C#中的属性是元数据,不能作为dynamic值使用,所以不能解决问题。