2010-11-16 53 views
1

我有一个抽象类,它定义了一些方法。这个类有两个子类。我应该在哪里测试抽象类的方法?

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

你们认为什么?

+0

http://stackoverflow.com/questions/104958/testing-abstract-class-concrete-methods的副本 – Mark 2010-11-16 20:24:18

+0

http://stackoverflow.com/questions/243274/best-practice-unit-testing-abstract的副本 - 班 – Mark 2010-11-16 20:24:34

回答

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

我会去一个最小的假子类,将其与抽象类相关联。我喜欢认为无论发生在任何具体实例化中的情况如何,都可以正确地测试Abstract类。这确实假设Abstract类中的代码是不平凡的,编写假类并不是不合理的工作 - 我认为这通常就是这种情况。

相关问题