微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在子测试类中隐藏测试方法

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

[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 举报,一经查实,本站将立刻删除。