我使用构造函数注入,所以我的测试现在应该是这样的。
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());