我刚刚创建了Manager
来处理SuperClass
,该SuperClassManager
扩展到了整个代码库,并使用某种SCM
(Manager
)进行了注册。
现在我想测试只知道SuperClass
的{{1}}。我尝试创建一个具体的SCM
,但这取决于第三方库,因此我在jUnit测试中没有这样做。现在可以选择模拟此SCM
的所有实例。
到目前为止一切都很好,但是,当我的Manager
处理SCM
时,它会返回我SuperClass
不知道或关心的Manager
的孩子。尽管如此,这些孩子的身份对于我的测试来说是非常重要的(对于平等等)。
由于我不能使用具体的SCM
,我必须模拟调用SCM
的相应函数的结果,但是,这意味着我的测试和(间接)我的{{1需要了解和关心Manager
的孩子。
检查代码库,我的测试似乎没有更合适的位置(已经保持适当的实际依赖关系)。
值得吗为单元测试引入不必要的依赖项?
更新18 / DEC / 2012
以下是我的问题的简化版本:
SuperClass
可以看出,在测试TopComponentManager时,我必须验证此包中未知的已确定的必要元素。
答案 0 :(得分:2)
为什么不直接模仿TopComponent
?
示例:
@Mocked
TopComponent _childTopComponent1;
答案 1 :(得分:0)
当调用模拟方法时,不确定这是否是您要查找的内容,而是Mockito provide a way to return mocks:
SCM scmMock = Mockito.mock(SCM.class, Mockito.RETURNS_MOCKS);
// scmMock.someMethod() will return a mock
答案 2 :(得分:0)
也许如果你可以使用一些代码,那么给你答案会更容易。
另外,当SuperClassManager
只知道Manager
时,如何致电SuperClass
?它是SuperClass
内的依赖吗?如果是这种情况,则SuperClass
具有错误的依赖关系,您应该考虑将其从SuperClass
中删除。
但如果您的经理不知道SCM
,但只知道SuperClass
,那么您应该模仿SuperClass
,因为Manager
的测试不得依赖于其他组件的代码,您不应该创建不必要的依赖。
答案 3 :(得分:0)
我最终通过创建一个只包含我的测试类的新项目来解决这个问题。此测试类依赖于TopComponentManager
和遍布代码库的所有子TopComponent
。但是,依赖关系不是问题。
通过这种方法,可以在此项目中实施更多测试,这些测试不会对生产代码产生任何其他依赖性。