我有两个测试类,其中一个继承自另一个,如下所示:
[TestClass]
public class TestClassBase
{
// does some actual testing (load file, call methods, do Asserts and such)
protected virtual DoTest(string fileName) { ... }
[TestMethod]
public void TestFileFoo() { DoTest("fooFile"); }
[TestMethod]
public void TestFileBar() { DoTest("barFile"); }
...
}
[TestClass]
public class TestClassChild : TestClassBase
{
// is just a little bit different from base method
protected override DoTest(string fileName) { ... }
}
我这样做是因为它TestClassBase
有大约 100 个测试某个方面的测试,现在我添加了一个新功能,我想在TestClassChild
. 从可维护性的角度来看,复制粘贴(即使用两个未通过继承连接的类)不是选项。一些测试标有[Ignore]
(它们还没有准备好),这对继承很好,因为新功能是旧功能的特例,即如果旧功能无法按预期工作,则测试新功能没有意义一。
但是有一点区别不适用于继承:有一些测试(实际上只有一个)应该在中完成,TestClassBase
而不是在TestClassChild
. 有没有办法做到这一点?
自己的想法:
我以为我可以
private
代替进行该测试,但这与(需要)public
不符。[TestMethod]
public
制作它
virtual
并用空方法覆盖它会起作用,因为空方法总是会通过,但它会使其他查看我的代码的人感到困惑。我们不希望测试出现在TestClassChild
不是真实测试的测试列表中。以某种方式具有条件会很好
[TestMethod]
,例如,只有在某个变量具有某个值时它才“活跃”。然后我可以在两个测试类中相应地设置变量。也许可以通过预编译器指令来实现条件?用/定义符号并在线条周围
#define
放置?但是如何在两个类中以不同的方式定义符号呢?#if
#endif
[TestMethod]