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

时间:2018-04-03 18:00:17

标签: java maven unit-testing mockito tomee

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

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

@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());
}

有人能解释我如何做到这一点吗? :)

1 个答案:

答案 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的课程,并验证您是否在响应中获取了它们。