Чтобы протестировать наш API, который подключается к API графа facebook, мы используем фиктивную настройку сервера на основе Jersey Test Framework и grizzly:
@Path("/" + PostRest.RESOURCE)
@Produces("application/json")
public class PostRest {
public static final String RESOURCE = "111_222";
@GET
public Response getPost(@QueryParam("access_token") String access_token) {
if (access_token != VALID_TOKEN) {
return Response.status(400).entity(createErrorJson()).build();
}
return Response.status(200).entity(createSomeJsonString()).build();
}
Теперь, когда я могу реагировать на недопустимый или отсутствующий access_token правильным ответом об ошибке, я также хочу проверить, правильно ли реагирует мой API при попытке доступа к неизвестному ресурсу в facebook, т. е. к неизвестному пути.
Прямо сейчас я получаю 404 от моего гризли, очевидно, если я пытаюсь получить доступ, скажем, «/111_2», но Facebook, кажется, перехватывает эту ошибку и заключает ее в ответ Json, содержащий строку "false" с статусом 200.
Итак... Как настроить Test Framework для возврата
Response.status(200).entity("false").build();
каждый раз, когда он вызывается для известного пути?
Основной пример:
@ContextConfiguration({ "classpath:context-test.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest extends JerseyTest {
@Inject
private SomeConnection connection;
private String unkownId = "something";
public SomeTest() throws Exception {
super("jsonp", "", "com.packagename.something");
}
@Test(expected = NotFoundException.class)
public void testUnkownObjectResponse() throws NotFoundException {
// here it should NOT result in a 404 but a JSON wrapped error response
// which will be handled by the Connection class and
// result in a custom exception
connection.getObject(unkownId);
}
Или, может быть, я могу настроить гризли так, чтобы он вел себя так, как хотелось бы...?!
Спасибо!