我感到非常沮丧,因为我无法解决这个问题。我已经阅读了很多文章,但我无法弄清楚如何解决这个问题,但我认为我忽略了一些非常简单的事情。
我有一个带有几个端点的类,其中一个是:
@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());
}
有人能解释我如何做到这一点吗? :)
答案 0 :(得分:1)
您应该能够测试您的具体回答。
假设,方法courses
位于类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
的课程,并验证您是否在响应中获取了它们。