我应该在哪里测试抽象类的方法?

时间:2010-11-16 20:20:54

标签: unit-testing

我有一个定义一些方法的抽象类。这个类有两个子类。

我应该只为测试创建一个假子类,还是应该通过子类的测试来测试方法?通过子类进行测试似乎更自然,但是我必须在2个子类的测试之间复制测试代码。

你们有什么想法?

2 个答案:

答案 0 :(得分:3)

您不必复制测试代码 - 您可以编写测试方法,以便他们接受参数。

由于大多数测试框架不支持带参数的测试,因此您可以添加一个使用特定实例调用参数化测试方法的小包装器。您现在可以轻松选择是否有必要使用某个特定基类调用您的测试一次,或者对同一方法进行多次测试 - 对每个可能的基类进行一次测试。由于每次新测试只需要添加一个薄的包装器,因此代码重复很少。

void TestSomething(AbstractClass foo)
{
    // Your test code goes here.
    Assert.AreEqual(42, foo.Bar());
}

[Test]
void TestSomethingFoo1()
{
    TestSomething(new Foo1());
}

[Test]
void TestSomethingFoo2()
{
    TestSomething(new Foo2());
}

答案 1 :(得分:1)

我会选择一个最小的伪子类,将它与Abstract Class相关联。我喜欢认为抽象类是经过适当测试的,无论任何Concrete实例发生了什么。这确实假设Abstract类中的代码是非平凡的,并且编写假类不是错误的工作 - 使用模拟我认为通常会出现这种情况。