为什么getName()使用mockito返回null?

W.C*_*eau 1 java junit mockito

Person.java就是这段代码.

public class Person {
private String name;

public void setName(String name)
{
    this.name = name;
}

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

这是测试代码.

import org.mockito.Mock;
import junit.framework.*;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;


public class PersonTest {

@Mock
private Person person;

@Before
public void setUp(){
    MockitoAnnotations.initMocks(this);
}

@Test
public void testSetName() {
    person.setName("Larry");
    assertEquals("Larry", person.getName());        
}
Run Code Online (Sandbox Code Playgroud)

我使用此代码进行测试,但是person.getName()返回null并且我的测试失败.

我不知道为什么会失败.你能解释一下原因吗?:(

JB *_*zet 5

因为你没有测试你的代码.你正在测试Mockito.

这个人不应该被嘲笑.模拟类意味着:通过什么都不做的方法替换所有方法的实现.这就是发生的事情:getName()被一个什么都不做的方法所取代.所以它返回null.

所以测试应该是:

public class PersonTest {

    private Person person;

    @Before
    public void setUp() {
        person = new Person();
    }

    @Test
    public void testSetName() {
        person.setName("Larry");
        assertEquals("Larry", person.getName());        
    }
}
Run Code Online (Sandbox Code Playgroud)

模拟对于模拟被测对象的依赖关系非常有用.因此,如果您测试UserService,并且此UserService使用UserDAO,您可以模拟UserDAO来测试UserService的真实代码:您告诉DAO在findAll()调用其方法时返回2个用户,然后在内部调用UserService的方法调用userDao.findAll(),userService接收两个用户.然后,您还可以验证userDao.findAll()已被调用.