我有一个带有单元测试的基类,我有两个子类,用构建类时需要知道的不同数据进行初始化。
设置的示例代码如下:
[TestClass]
public class BaseClass
{
public BaseClass(object param){ }
[TestMethod]
public BaseTest() { /* Do Stuff */ }
}
[TestClass]
public class SubClass1 : BaseClass
{
public SubClass1() : base("data1") {}
}
[TestClass]
public class SubClass2 : BaseClass
{
public SubClass2() : base("data2") {}
}
理想情况下,我希望显示两个单元测试,SubClass1.BaseTest()和SubClass2.BaseTest()能够运行。但是,我只看到BaseClass.BaseTest。如果我将BaseClass抽象化,则测试资源管理器根本不会显示任何测试。
基本测试根据在构造类时传递的数据执行不同的操作,但它们具有相同的代码。我可以避免复制测试吗?我可以避免为重定向到基类的子类中的每个测试编写一个方法吗?
答案 0 :(得分:2)
AFAIK,这是Visual Studio Test(以前的 MSTest )不支持的场景。
无论如何,提供基本测试用例听起来更像是测试设计缺陷而不是实际优势。
测试类应提供具体的测试方法,以检查某些测试类是否以正确的方式完成工作。
您应该使用测试基类来共享常见的测试助手方法,属性,如果您想在许多测试用例中共享一些步骤,则应在静态类TestAbbreviations
中实现它们。
测试应该尽可能简单,你应该避免过度工程。如果您使用KISS原则实现测试套件,它也将作为如何使用您的代码的文档。
答案 1 :(得分:1)
虽然Matias answer一般看起来不错,但我目前的状态不能使用这种方法。我找到了解决方案,但为什么基本测试没有出现在Text Explorer中。对于要在Test Explorer中的子类中显示的Base测试,base和sub class需要位于同一个项目中。我让它们分开了,这使它无法运作。