我需要对从抽象类A派生的类B进行单元测试,该类具有一些实现。
我的问题是:您应该对父类型(例如abstract ClassB
)还是子类/派生类型(例如ClassA
)进行单元测试
编写单元测试的部分目的是为了维护代码的完整性。与帕累托原则(80/20规则)一致,要测试的实现细节通常在派生类型中。所以...
应该为派生类型/子类编写单元测试,但是单元测试实现应按照SOLID Liskov替换原则引用父类型:
“程序中的对象应该可以用其子类型的实例替换,而不会改变该程序的正确性”
换句话说,您正在测试Dog
,但是单元测试源代码将引用Mammal
:
Mammal pet = new Dog();
pet.Speak();
如果基本类型(例如Mammal
)包含要进行单元测试的可执行代码,那么您将必须创建派生类型(例如Dog
)的实例。例如,您可以执行以下操作:
[TestCase]
public class MammalTest
{
[TestMethod]
AbstractMethodNameHere_YourTestCase_YourExpectedResults()
{
Mammal pet = new Dog();
// Here you could test the method that has been implemented
// in the base class.
Assert.IsTrue(pet.AbstractMethodNameHere());
}
}
重申一下,您通常不会编写特定于基类的测试,因为实现细节通常在派生类型中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句