使用 Jax RS 和 pathParam 进行单元测试
Unit Testing using Jax RS and pathParam
我目前正在编写一个功能,允许用户从大厅开始游戏(有点像我们之间的游戏:所有者点击开始游戏,游戏开始。)
为此,我首先获取带有路径的大厅 ID (=token),然后检查该大厅是否存在以及大厅中的每个人是否都已准备就绪。
如果这两个条件都成立,我 return 只是一个 ok 代码 (200)。
如果我尝试我的失眠请求,它会很好用。我遇到的问题是我想创建单元测试函数来测试这个函数 startGame。
这是我的函数代码:
@GET
@Path("/{token}/start")
@Produces(MediaType.TEXT_PLAIN)
public Response startGame(@PathParam("token") String token) {
if (!sessionsDB.sessionExist(token)){
return Response.status(Response.Status.UNAUTHORIZED).build();
}
if(!userLobbyDB.isEveryoneReady(token)) {
return Response.status(Response.Status.CONFLICT).build();
}
return Response.ok().build();
}
还有我的测试函数:
@Test
public void startGame_Test() {
// ----------- Init des DB ----------- //
SessionsDB sessionsDB = SessionsDB.getInstance();
UserDB userDB = UserDB.getInstance();
UserInLobbyDB userLobbyDB = UserInLobbyDB.getInstance();
// ----------- Création d'une Session ----------- //
User creator_user = new User("ownerUsername");
userDB.add_user(creator_user);
Session newSession = new Session(creator_user.getUser_id());
sessionsDB.add_session(newSession);
UserInLobby userInLobby = new UserInLobby(creator_user, newSession.getToken());
userLobbyDB.addUserInLobby(userInLobby);
String token = newSession.getToken();
// ----------- Init des joiners ----------- //
User joiner1 = new User("joiner1");
User joiner2 = new User("joiner2");
User joiner3 = new User("joiner3");
User joiner4 = new User("joiner4");
// ----------- Ajout des Joiners à la Session ----------- //
UserInLobby userInLobbyJoiner1 = new UserInLobby(joiner1, token);
UserInLobby userInLobbyJoiner2 = new UserInLobby(joiner2, token);
UserInLobby userInLobbyJoiner3 = new UserInLobby(joiner3, token);
UserInLobby userInLobbyJoiner4 = new UserInLobby(joiner4, token);
// ----------- Setting them to Ready ----------- //
userInLobbyJoiner1.setReadyOrNot(1);
userInLobbyJoiner2.setReadyOrNot(1);
userInLobbyJoiner3.setReadyOrNot(1);
userInLobbyJoiner4.setReadyOrNot(1);
userLobbyDB.addUserInLobby(userInLobbyJoiner1);
userLobbyDB.addUserInLobby(userInLobbyJoiner2);
userLobbyDB.addUserInLobby(userInLobbyJoiner3);
userLobbyDB.addUserInLobby(userInLobbyJoiner4);
// ----------- Test que toutes les conditions sont réunis pour pouvoir lancer la game ----------- //
given().pathParam("token", token)
.when().get("/{token}/start")
.then()
.statusCode(200);
}
这个测试函数的第一部分创建了一个所有者用户和大厅(所以我们得到了这个会话的令牌)并且我创建了一些加入者用户,我只是将它们添加到会话中并将它们设置为就绪.
我知道应该找不到第一个响应或 HTTP 代码,但我更改它以查看我的问题出在哪里。
因为当我尝试构建时,我在这个测试上失败了,它说:“1 期望失败。
预期状态代码 <200> 但为 <404>。"
但我不知道这个错误是从哪里来的。我在任何地方都没有 return 任何未找到的响应(如果只有 returns 是一个布尔值并且在它们的主体中没有响应,这两个函数就是如此)。
一个可能的想法是它没有找到要执行的函数(我的意思是路径有问题,所以我的函数没有被调用)。
但这会很奇怪,因为当我用失眠请求进行测试时,它运行良好。
你有什么想法吗?
非常感谢您花时间阅读本文^^
我已经解决了我的问题,路径有问题,这就是我收到 404 的原因。
谢谢^^
我目前正在编写一个功能,允许用户从大厅开始游戏(有点像我们之间的游戏:所有者点击开始游戏,游戏开始。)
为此,我首先获取带有路径的大厅 ID (=token),然后检查该大厅是否存在以及大厅中的每个人是否都已准备就绪。 如果这两个条件都成立,我 return 只是一个 ok 代码 (200)。
如果我尝试我的失眠请求,它会很好用。我遇到的问题是我想创建单元测试函数来测试这个函数 startGame。
这是我的函数代码:
@GET
@Path("/{token}/start")
@Produces(MediaType.TEXT_PLAIN)
public Response startGame(@PathParam("token") String token) {
if (!sessionsDB.sessionExist(token)){
return Response.status(Response.Status.UNAUTHORIZED).build();
}
if(!userLobbyDB.isEveryoneReady(token)) {
return Response.status(Response.Status.CONFLICT).build();
}
return Response.ok().build();
}
还有我的测试函数:
@Test
public void startGame_Test() {
// ----------- Init des DB ----------- //
SessionsDB sessionsDB = SessionsDB.getInstance();
UserDB userDB = UserDB.getInstance();
UserInLobbyDB userLobbyDB = UserInLobbyDB.getInstance();
// ----------- Création d'une Session ----------- //
User creator_user = new User("ownerUsername");
userDB.add_user(creator_user);
Session newSession = new Session(creator_user.getUser_id());
sessionsDB.add_session(newSession);
UserInLobby userInLobby = new UserInLobby(creator_user, newSession.getToken());
userLobbyDB.addUserInLobby(userInLobby);
String token = newSession.getToken();
// ----------- Init des joiners ----------- //
User joiner1 = new User("joiner1");
User joiner2 = new User("joiner2");
User joiner3 = new User("joiner3");
User joiner4 = new User("joiner4");
// ----------- Ajout des Joiners à la Session ----------- //
UserInLobby userInLobbyJoiner1 = new UserInLobby(joiner1, token);
UserInLobby userInLobbyJoiner2 = new UserInLobby(joiner2, token);
UserInLobby userInLobbyJoiner3 = new UserInLobby(joiner3, token);
UserInLobby userInLobbyJoiner4 = new UserInLobby(joiner4, token);
// ----------- Setting them to Ready ----------- //
userInLobbyJoiner1.setReadyOrNot(1);
userInLobbyJoiner2.setReadyOrNot(1);
userInLobbyJoiner3.setReadyOrNot(1);
userInLobbyJoiner4.setReadyOrNot(1);
userLobbyDB.addUserInLobby(userInLobbyJoiner1);
userLobbyDB.addUserInLobby(userInLobbyJoiner2);
userLobbyDB.addUserInLobby(userInLobbyJoiner3);
userLobbyDB.addUserInLobby(userInLobbyJoiner4);
// ----------- Test que toutes les conditions sont réunis pour pouvoir lancer la game ----------- //
given().pathParam("token", token)
.when().get("/{token}/start")
.then()
.statusCode(200);
}
这个测试函数的第一部分创建了一个所有者用户和大厅(所以我们得到了这个会话的令牌)并且我创建了一些加入者用户,我只是将它们添加到会话中并将它们设置为就绪.
我知道应该找不到第一个响应或 HTTP 代码,但我更改它以查看我的问题出在哪里。 因为当我尝试构建时,我在这个测试上失败了,它说:“1 期望失败。 预期状态代码 <200> 但为 <404>。"
但我不知道这个错误是从哪里来的。我在任何地方都没有 return 任何未找到的响应(如果只有 returns 是一个布尔值并且在它们的主体中没有响应,这两个函数就是如此)。
一个可能的想法是它没有找到要执行的函数(我的意思是路径有问题,所以我的函数没有被调用)。 但这会很奇怪,因为当我用失眠请求进行测试时,它运行良好。
你有什么想法吗?
非常感谢您花时间阅读本文^^
我已经解决了我的问题,路径有问题,这就是我收到 404 的原因。 谢谢^^