用于测试创建和异常功能的 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。