2013-05-06 93 views
4

对象的另一种方法,我有一个接口,前一种方法:测试它调用的Mockito

interface MyService { 
    void createObj(int id) 
    void createObjects() 
} 

我想测试createObjects方法的实现,它的身体像:

void createObjects() { 
    ... 
    for (...) { 
    createObj(someId); 
    } 
} 

我已经测试createObj(id)

@Test public void testCreate() { 
    //given 
    int id = 123; 
    DAO mock = mock(DAO.class); 
    MyService service = new MyServiceImpl(mock); 

    //when 
    service.createObj(id); 

    //verify 
    verify(mock).create(eq(id)); 
} 

所以我不想重复所有测试用例为createObjects

如何确保除了正在测试的实体之外还调用了另一种真实对象的方法?

回答

7

使用间谍:

MyService myService = new MyServiceImpl() 
MyService spy = spy(myService); 
doNothing().when(spy).createObj(anyInt()); 

// now call spy.createObjects() and verify that spy.createObj() has been called 

这说明,像任何事物一样,在the api doc

+0

谢谢。我正在使用这个。但文档说,这可以“闻”,所以我想为什么是这样以及如何避免:) – glaz666 2013-05-06 14:50:12

+0

这正是间谍的目的。 “嗅觉”并不一定意味着什么是错的;只有某些**可能是错误的。在这种特殊情况下,这是正确的。 – 2013-05-06 21:29:40