问题描述
[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
中的相同 100 个文件中进行测试。从可维护性的角度来看,复制粘贴(即使用两个未通过继承连接的类)是没有选择的。一些测试用 [Ignore]
标记(它们还没有准备好)这对继承很好,因为新功能是旧功能的特例,即如果旧功能没有按预期工作,它不会使感觉测试新的。
但是有一点差别不适用于继承:有些测试(实际上只有一个)应该在 TestClassBase
中完成,而不是在 TestClassChild
中完成。有没有办法做到这一点?
自己的想法:
我以为我可以只进行
private
而不是public
的测试,但这与[TestMethod]
(需要public
)不符。-
使它成为
virtual
并用空方法覆盖它会有点工作,因为空方法将始终通过,但它会使查看我的代码的其他人感到困惑。我们不希望测试出现在TestClassChild
的测试列表中,这些测试不是真正的测试。 -
以某种方式让
[TestMethod]
成为条件会很好,例如因此只有当某个变量具有某个值时它才“活动”。然后我可以在两个测试类中相应地设置变量。 -
也许可以通过预编译器指令来实现条件性?使用
#define
定义符号并在#if
行周围放置#endif
/[TestMethod]
?但是如何在两个类中定义不同的符号呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)