使用Mockito / Spring测试服务层并使用构造函数注入

时间:2017-11-27 09:02:14

标签: java spring testing mockito

我使用构造函数注入,所以我的测试现在应该是这样的。

import org.junit.Assert;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import com.user.model.jpa.User;
import com.user.repository.UserRepository;
import com.user.service.UserService;
import com.job.service.JobService;

@RunWith(MockitoJUnitRunner.class)
public class UserServiceImplTest {


    @Mock
    private UserRepository userRepository;

    @Mock
    private JobService jobService;

    @Mock
    private User testObject;

    private UserService userService;

    @Before
    public void setUp() {
        userService = new UserServiceImpl(userRepository, jobService);
    }
    @Test
    public void testAdd() {

        //given
        testObject = new Mock(User.class);  //commented line
        testObject.setName("name");

        //when
        userService.add(user);

        //then
        Assert.assertEquals("name",task.getName());
    }
}

这可能像我在评论行中那样嘲笑吗? (显然对象需要更多字段,但对于测试用例,我只需要1个字段)

我想避免使用所有字段手动创建新对象,因为它有太多字段和其他两个类的内容 (身份证,姓名,地址,工作等)。

这是我在serviceImpl中的add方法:

@Override
public void add(User user) {
    user.setName(StringUtils.trimToNull(user.getName()));
    user.setSurname(StringUtils.trimToNull(user.getSurname()));
    user.setJob(jobService.getCorrectJob());
    user.setCreateDate(LocalDateTime.now());
    userRepository.save(user);
}

更新: 有了PLOG给我答复的信息,我创建了这样的测试:

    //given
    testObject.setId(999);
    testObject.setName("name");
    //when
    userService.add(testObject);
    //then
    assertEquals("name", userService.getById(999).getName());

但它仍然是警告:java.lang.NullPointerException

UPDATE2:

我通过在assertEquals中删除方法userService.getById(999).getName()来解决空指针异常。

我的例子中正确且有效的测试是:

    //given
    testObject = new User();
    testObject.setName("name");
    //when
    userService.add(testObject);
    //then
    assertEquals("name", testObject.getName());

0 个答案:

没有答案