0

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

[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]

4

0 回答 0