我注意到你可以通过将抽象类实例化为一个模拟对象来对它进行单元测试.因此,您可以模拟抽象属性和方法,同时能够测试已实现的属性和方法.
但是,我习惯于区分要测试的类和注入到mock / stub的依赖项.那么,在我新启蒙的早期阶段,我想知道这种测试方法是否有任何陷阱?有什么想法吗?
问候,
莫滕
解决方法
具有任何价值的抽象类应该具有可以实例化的具体子类.所以单元测试那些,并通过它们隐式地基类.
如果它没有具体的子类,我想不出它应该存在的任何理由(作为一个抽象类,即).
一般来说,我更喜欢使用mocking来设置要测试的类的环境,而不是实例化类本身.这种区别 – 对我来说 – 使测试用例更加清晰,并确保我始终测试类的真实功能.
当然,当主要问题是无论如何能够以某种方式编写单元测试以启用重构时(如Working Effectively with Legacy Code中所讨论的),我可以想到案例(使用遗留代码).作为这种情况下的临时解决方案,(几乎)任何事情都会发生.但是一旦单元测试工作,该类应该适当地重构,以使其干净和可测试(并且它的单元测试也是如此,以使它们可维护).