【发布时间】:2016-03-11 17:08:23
【问题描述】:
我一直在尝试让简单的测试用例工作但没有成功。他们只是给出一个空指针错误:
java.lang.NullPointerException
例子:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringCrudApplication.class)
public class ServiceTest {
UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Test
public void findUserByIdTest() throws Exception {
long id = (long) 0;
User user = new User();
user.setId(id);
user.setAddress("main st");
user.setEmail("drew@gmail.com");
user.setUsername("Drew");
System.out.println("Name: "+user.getUsername()+" ID: "+user.getId()); //this is printing
userService.saveUser(user);
User userTest = userService.findUserById(id);
System.out.println("Username="+userTest.getUsername());
assertEquals("Drew", userTest.getUsername());
}
我在控制台中得到以下输出:
Name: Drew ID: 0
但是一旦到达:
userService.saveUser(user);
空指针被创建。
这是正在测试的方法:
public class UserServiceImpl implements UserService {
private static final AtomicLong counter = new AtomicLong();
private static List<User> users;
static {
users = populateDummyUsers();
}
@Override
public User findUserById(Long id) {
for (User user : users) {
if (user.getId() == id) {
return user;
}
}
return null;
}
@Override
public void saveUser(User user) {
if(user != null) {
user.setId(counter.incrementAndGet());
users.add(user);
}
}
【问题讨论】:
-
因为在你的 saveUser 方法中你将用户对象的 id 增加 1 然后存储它。因此 id = 0 的用户存储为 id = 1。当您尝试获取该用户时,您将 0 作为参数传递,并且该方法无法在用户列表中找到具有 0 id 的用户并返回 null,因此出现异常。
-
你说的很对!请将此评论移至答案。
标签: junit spring-boot