在子测试类中隐藏测试方法

问题描述

我有两个测试类,其中一个继承自另一个,如下所示:

[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 (将#修改为@)