小编Law*_*man的帖子

Mockito:使用"thenReturn"中的方法返回模拟不起作用

我遇到了我认为可能是Mockito的错误,但是想知道是否有其他人可以解释为什么这个测试不起作用.

基本上,我有两个对象,如下所示:

public class FirstObject {
    private SecondObject secondObject;
    public SecondObject getSecondObject() { return secondObject; }
}

public class SecondObject {
    private String name;
    public String getName() { return name; }
}
Run Code Online (Sandbox Code Playgroud)

第一个对象通过注释和before方法进行模拟:

@Mock
FirstObject mockedFirstObject;

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
}
Run Code Online (Sandbox Code Playgroud)

第二个对象在一个方法中被模拟:

public SecondObject setupMockedSecondObject() {
    SecondObject secondObject = Mockito.mock(SecondObject.class);
    Mockito.when(secondObject.getName()).thenReturn("MockObject");
    return secondObject;
}
Run Code Online (Sandbox Code Playgroud)

thenReturn包含对此方法的直接调用以设置并获取第二个对象的模拟时,它将失败:

@Test
public void notWorkingTest() {
    Mockito.when(mockedFirstObject.getSecondObject()).thenReturn(setupMockedSecondObject());
    Assert.assertEquals(mockedFirstObject.getSecondObject().getName(), "MockObject");
}
Run Code Online (Sandbox Code Playgroud)

但是,当同一方法返回的模拟被分配给一个局部变量时thenReturn,它会起作用:

@Test
public void workingTest() {
    SecondObject mockedSecondObject = setupMockedSecondObject(); …
Run Code Online (Sandbox Code Playgroud)

java unit-testing mocking mockito

32
推荐指数
1
解决办法
3万
查看次数

标签 统计

java ×1

mocking ×1

mockito ×1

unit-testing ×1