Mockito - 测试 return 类型是否与预期相同
Mockito - test if return type is same as expected
我非常沮丧,因为我想不通。我浏览了很多文章,但我不知道如何解决这个问题,但我想我忽略了一些非常简单的事情。
我有一个 class 有几个端点,其中之一是:
@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();
}
}
这个方法应该总是return一个Response.status。这正是我想要测试的。我知道不可能对实际响应(200 或 403)进行单元测试,但我想知道如何测试是否至少 Response.status 被 returned。我在我的 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
在 class Controller
中。这是你的 class 待测,你的目标应该是测试这里的代码,这是你在控制器中编写的代码。
这是一个例子:
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
模拟为 return 和 studentId
,然后模拟此 studentId
的课程并验证您这样做让他们在回应中。
我非常沮丧,因为我想不通。我浏览了很多文章,但我不知道如何解决这个问题,但我想我忽略了一些非常简单的事情。
我有一个 class 有几个端点,其中之一是:
@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();
}
}
这个方法应该总是return一个Response.status。这正是我想要测试的。我知道不可能对实际响应(200 或 403)进行单元测试,但我想知道如何测试是否至少 Response.status 被 returned。我在我的 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
在 class Controller
中。这是你的 class 待测,你的目标应该是测试这里的代码,这是你在控制器中编写的代码。
这是一个例子:
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
模拟为 return 和 studentId
,然后模拟此 studentId
的课程并验证您这样做让他们在回应中。