将@Mock注入另一个@Mock或重构器?

时间:2014-08-14 19:28:26

标签: java unit-testing mocking mockito

@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包或类似的东西。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Foo的单元测试应该只关心模拟Foo的直接依赖关系。

您不应该假设AS使用CachedDb来实现其方法。 CS不在乎。它所做的就是与AS进行交互。 AS是否使用CachedDB是无关紧要的,只要它的方法做他们应该做的事情。

所以,CS的测试应该模拟AS。不是CachedDB。