如何对抽象类进行unit testing
在Visual Studio中使用了创建unit testing工具,显然它试图实例化我的抽象类。
我的问题是:我应该尝试unit testingVisual Studio试图让我这样做的方式,还是应该创建一个要实例化的模拟类,还是应该只测试使用这个抽象类的方法?
谢谢。
如果这个抽象类的方法值得测试,那么你应该测试它们。 您总是可以为测试子类化抽象类(并将其命名为MyAbstractClassTesting)并测试这个新的具体类。
有两个相反的观点:
- 不要测试抽象类本身,测试从它inheritance的具体类
- 抽象类也应该进行测试,因为它提供了一些在所有inheritance类之间共享的内置逻辑,因此您只需在抽象类中测试一次基本逻辑
我更喜欢第二个选项(当前)并使用RhinoMocks PartialMockfunction测试抽象类,这允许我创建一个抽象类的模拟。
-
只需测试实现类。
-
您总是可以创建一个特定的测试实现,不会增加额外的function。
-
听听测试。 使用魔术的模拟工具来测试抽象类和私有方法等是测试代码的味道
从mockrepository使用:
[testmethod] public void testwithmockrepository() { var mockrepository = new rhino.mocks.mockrepository(); var mock = mockrepository.partialmock(); using ( mockrepository.record() ) { expect.call( mock.dosomething( arg.is.anything ) ).return( "hi..." ).repeat.once(); } using ( mockrepository.playback() ) { assert.areequal( "hi..." , mock.dosomething( "salam" ) ); } }