我正在一个项目中进行类内部调用,但是结果是简单值的很多倍。示例(不是真实的代码):
public boolean findError(Set<Thing1> set1, Set<Thing2> set2) {
if (!checkFirstCondition(set1, set2)) {
return false;
}
if (!checkSecondCondition(set1, set2)) {
return false;
}
return true;
}
为这种类型的代码编写单元测试真的很困难,因为我只想测试条件系统而不是实际条件的实现。(我在单独的测试中这样做。)实际上,如果我传递实现条件的函数会更好,而在测试中我只提供一些模拟即可。这种方法的问题在于嘈杂:我们大量使用泛型。
一个可行的解决方案;但是,这是使被测对象成为间谍并模拟对内部函数的调用。
systemUnderTest = Mockito.spy(systemUnderTest);
doReturn(true).when(systemUnderTest).checkFirstCondition(....);
这里的关注点是有效更改了SUT的实现,并且使测试与实现保持同步可能会出现问题。这是真的?是否有最佳实践来避免这种内部方法调用的麻烦?
请注意,我们正在谈论的是算法的各个部分,因此将其分解为多个类可能不是一个理想的决定。