@RunWith(MockitoJUnitRunner.class)
public class CSTest {
@Mock
private CachedDb cachedDb;
@InjectMocks
private AS aS;
@InjectMocks
private CS cS;
}
public class CS extends BS {
@Inject
protected AS aS;
public doStuff() {
aS.doSomething();
}
}
public class AS extends BS {
//bunch of code here
}
有没有办法让我在测试类中注入CS,模拟的AS里面有一个注入了CachedDb的模拟?代码可以不费力地重构:我把doSomething放在AS中,因为行为类似于AS的其他函数,但如果这是糟糕的设计,我可以将它重构为共享的utils包或类似的东西。
提前感谢您的帮助。
答案 0 :(得分:1)
Foo
的单元测试应该只关心模拟Foo
的直接依赖关系。
您不应该假设AS使用CachedDb来实现其方法。 CS不在乎。它所做的就是与AS进行交互。 AS是否使用CachedDB是无关紧要的,只要它的方法做他们应该做的事情。
所以,CS的测试应该模拟AS。不是CachedDB。