我有一个抽象类,它定义了一些方法。这个类有两个子类。我应该在哪里测试抽象类的方法?
我应该为测试创建一个假子类,还是应该通过子类的测试来测试这些方法?通过子类测试看起来更自然,但是我必须在2个子类的测试之间复制测试代码。
你们认为什么?
我有一个抽象类,它定义了一些方法。这个类有两个子类。我应该在哪里测试抽象类的方法?
我应该为测试创建一个假子类,还是应该通过子类的测试来测试这些方法?通过子类测试看起来更自然,但是我必须在2个子类的测试之间复制测试代码。
你们认为什么?
您不必复制测试代码 - 您可以编写测试方法,以便它们接受参数。
由于大多数测试框架不支持采用参数的测试,因此您可以添加一个小包装,用特定实例调用您的参数化测试方法。现在,您可以轻松选择是否有必要使用某个特定的基类来调用您的测试,或者对同一方法进行多次测试 - 对每个可能的基类进行一次测试。由于每次新测试只需要添加一个简单的包装器,所以代码重复性很小。
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());
}
我会去一个最小的假子类,将其与抽象类相关联。我喜欢认为无论发生在任何具体实例化中的情况如何,都可以正确地测试Abstract类。这确实假设Abstract类中的代码是不平凡的,编写假类并不是不合理的工作 - 我认为这通常就是这种情况。
http://stackoverflow.com/questions/104958/testing-abstract-class-concrete-methods的副本 – Mark 2010-11-16 20:24:18
http://stackoverflow.com/questions/243274/best-practice-unit-testing-abstract的副本 - 班 – Mark 2010-11-16 20:24:34