你是否有理由不创建对象的部分虚假或仅伪造正在测试的对象的一个方法,以便测试另一个方法?这可能有助于节省制作整个新模拟对象的时间,或者当您在伪造的方法中存在外部依赖关系时,您无法合理地摆脱它,并且想要将其排除在所有其他单元测试之外。
你是否有理由不创建对象的部分虚假或仅伪造正在测试的对象的一个方法,以便测试另一个方法?这可能有助于节省制作整个新模拟对象的时间,或者当您在伪造的方法中存在外部依赖关系时,您无法合理地摆脱它,并且想要将其排除在所有其他单元测试之外。
我最初写下这个问题时,对单元测试几乎一无所知,也不了解依赖注入。现在,经过一些经验的积累,我想补充说,使用这种测试技术的需要可能是一种不好的信号。它可能意味着您需要重新设计依赖项的方法。如果需要模拟的方法是继承自基类的,则可能意味着您需要更认真地考虑“组合优于继承”的格言。您应该注入您的依赖项而不是继承它们。
有一些非常好的软件包可以方便地完成这种工作。例如,来自Mockito文档:
//You can mock concrete classes, not only interfaces
LinkedList mockedList = mock(LinkedList.class);
//stubbing
when(mockedList.get(0)).thenReturn("first");
一开始很难相信,但它确实能做出一些真正的魔法。当你调用它时
String firstMember = mockedList.get(0);