gpt4 book ai didi

java - Mockito - 测试返回类型是否与预期相同

转载 作者:行者123 更新时间:2023-11-30 06:13:59 26 4
gpt4 key购买 nike

我非常沮丧,因为我无法弄清楚这一点。我已经阅读了很多文章,但我不知道如何解决这个问题,但我认为我忽略了一些非常简单的事情。

我有一个带有几个端点的类,其中一个是:

@GET
@Path("courses")
@Produces(MediaType.APPLICATION_JSON)
public Response courses(@QueryParam("token") String token) {
Integer studentId = iStudentDAO.getStudentIdByToken(token);
if(studentId == null){
return Response.status(403).build();
} else {
GetStudentsResponse studentCourses = iStudentDAO.getStudentCourses(studentId);
return Response.status(200).entity(courses.name).build();
}
}

此方法应始终返回 Response.status。这正是我想要测试的。我知道不可能对实际响应(200 或 403)进行单元测试,但我想知道如何测试是否至少返回 Response.status。我在 Maven 项目中使用 Mockito 来实现此目的。

@Test   
public void testGetAllCourses () {
String token = "100-200-300";
StudentRequests studentRequests = mock(StudentRequests.class);
when(studentRequests.courses(token)).thenReturn(Response.class);
Response expected = Response.class;
assertEquals(expected, studentRequests.courses());
}

谁能解释一下如何实现这个目标? :)

最佳答案

您应该能够测试您的具体响应。假设方法courses位于类Controller中。这是您正在测试的类,您的目标应该是测试这里的代码,这是您在 Controller 中编写的代码。这是一个例子:

package test;

import static org.junit.Assert.*;

import org.apache.catalina.connector.Response;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

public class ControllerTest {

@Mock
IStudentDAO iStudentDAO;

@InjectMocks
Controller controller;

@Before
public void init() {
MockitoAnnotations.initMocks(this);
}

@Test
public void testCoursesWhenStudentIDNotFound() {
Mockito.when(iStudentDAO.getStudentIdByToken("1234")).thenReturn(null);
Response response = controller.courses("1234");
assertEquals(403, response.getStatus())
}

}

同样,在下一个测试用例中,您可以模拟 IStudentDAO,返回一个 studentId,然后返回该 studentId 的类(class)并验证您确实在回复中得到了它们。

关于java - Mockito - 测试返回类型是否与预期相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com