用于测试创建和异常功能的 Junit 集成测试问题
Junit Integration Test issue for testing create and exception functionality
我浏览了很多关于集成的文章 Testing.As 根据我的理解,我们必须在不使用模拟的情况下进行测试。我需要测试如果大厅已经存在,它应该抛出异常。我正在创建大厅,大厅又与用户服务层交互。下面的集成测试失败,在 setupLobby 方法中 userService.createUser(testUser) 处出现空指针异常。
我在这个集成测试中做错了什么?
集成测试代码-
public class LobbyServiceIntegrationTest {
LobbyService lobbyService;
UserService userService;
private User testUser;
private Lobby lobbyTest;
private Long lobbyId;
private List<User> userList = new ArrayList<>();
@BeforeEach
public void setupLobby(){
testUser = new User();
testUser.setName("testName");
testUser.setUsername("testUsername");
testUser = userService.createUser(testUser);
lobbyTest = new Lobby();
lobbyTest.setName("testLobby");
lobbyTest.setHostPlayerId(testUser.getId());
lobbyId = lobbyService.createLobby(lobbyTest);
}
@Test
public void createdLobbyExist_Exception(){
Lobby newLobby = new Lobby();
newLobby.setName("testLobby");
newLobby.setHostPlayerId(1L);
assertThrows(LobbyException.class, ()->lobbyService.createLobby(newLobby));
}
}
我要测试的功能
public Long createLobby(Lobby newLobby){
checkIfLobbyExist(newLobby);
newLobby.getPlayerIds().add(newLobby.getHostPlayerId());
newLobby = lobbyRepository.save(newLobby);
User user = userRepository.getOne(newLobby.getHostPlayerId());
user.setLobbyId(newLobby.getId());
userRepository.save(user);
return newLobby.getId();
}
并创建用户
public User createUser(User newUser) {
checkIfUserExists(newUser);
newUser.setToken(UUID.randomUUID().toString());
newUser.setStatus(UserStatus.OFFLINE);
newUser.setCreationDate(new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
// saves the given entity but data is only persisted in the database once flush() is called
newUser = userRepository.save(newUser);
userRepository.flush();
log.debug("Created Information for User: {}", newUser);
return newUser;
}
您的 userService 对象和 lobbyService 根本没有初始化,这就是您捕获空指针异常的原因。
如果您正在使用 Spring 框架,则添加到 class 的顶部 @SpringBootTest 注释 + @Autowired 用于 userService 和 lobbyService。
我浏览了很多关于集成的文章 Testing.As 根据我的理解,我们必须在不使用模拟的情况下进行测试。我需要测试如果大厅已经存在,它应该抛出异常。我正在创建大厅,大厅又与用户服务层交互。下面的集成测试失败,在 setupLobby 方法中 userService.createUser(testUser) 处出现空指针异常。
我在这个集成测试中做错了什么?
集成测试代码-
public class LobbyServiceIntegrationTest {
LobbyService lobbyService;
UserService userService;
private User testUser;
private Lobby lobbyTest;
private Long lobbyId;
private List<User> userList = new ArrayList<>();
@BeforeEach
public void setupLobby(){
testUser = new User();
testUser.setName("testName");
testUser.setUsername("testUsername");
testUser = userService.createUser(testUser);
lobbyTest = new Lobby();
lobbyTest.setName("testLobby");
lobbyTest.setHostPlayerId(testUser.getId());
lobbyId = lobbyService.createLobby(lobbyTest);
}
@Test
public void createdLobbyExist_Exception(){
Lobby newLobby = new Lobby();
newLobby.setName("testLobby");
newLobby.setHostPlayerId(1L);
assertThrows(LobbyException.class, ()->lobbyService.createLobby(newLobby));
}
}
我要测试的功能
public Long createLobby(Lobby newLobby){
checkIfLobbyExist(newLobby);
newLobby.getPlayerIds().add(newLobby.getHostPlayerId());
newLobby = lobbyRepository.save(newLobby);
User user = userRepository.getOne(newLobby.getHostPlayerId());
user.setLobbyId(newLobby.getId());
userRepository.save(user);
return newLobby.getId();
}
并创建用户
public User createUser(User newUser) {
checkIfUserExists(newUser);
newUser.setToken(UUID.randomUUID().toString());
newUser.setStatus(UserStatus.OFFLINE);
newUser.setCreationDate(new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
// saves the given entity but data is only persisted in the database once flush() is called
newUser = userRepository.save(newUser);
userRepository.flush();
log.debug("Created Information for User: {}", newUser);
return newUser;
}
您的 userService 对象和 lobbyService 根本没有初始化,这就是您捕获空指针异常的原因。
如果您正在使用 Spring 框架,则添加到 class 的顶部 @SpringBootTest 注释 + @Autowired 用于 userService 和 lobbyService。