Я хочу выполнить интеграционные тесты на моей конечной точке REST, но у меня возникают проблемы.
Ниже моя конечная точка. ПРИМЕЧАНИЕ: я не могу изменить эту часть кода.
@Path("/people")
public class PersonResource {
private final PersonService personService;
@Inject
public PersonResource(final PersonService personService) {
this.personService = personService;
}
@GET
@Produces("application/json")
public List<Person> getPersonList() {
return personService.getPersonList();
}
}
Из того, что я смог найти в Интернете, у меня есть следующая базовая структура для моего теста.
public class PersonResourceTest {
private Dispatcher dispatcher;
private POJOResourceFactory factory;
@Before
public void setup() {
dispatcher = MockDispatcherFactory.createDispatcher();
factory = new POJOResourceFactory(PersonResource.class);
dispatcher.getRegistry().addResourceFactory(factory);
}
@Test
public void testEndpoint() throws URISyntaxException {
MockHttpRequest request = MockHttpRequest.get("people");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
System.out.print("\n\n\n\n\n" + response.getStatus() + "\n\n\n\n\n");
System.out.print("\n\n\n\n\n" + response.getContentAsString() + "\n\n\n\n\n");
}
}
Однако это приводит к следующей ошибке в последней строке метода setup
.
java.lang.RuntimeException: RESTEASY003190: Could not find constructor for class: my.path.PersonResource
Я изучил API Registry
и подумал, что, возможно, мне следовало бы вместо этого использовать addSingletonResource
, поэтому я изменил последнюю строку setup
на dispatcher.getRegistry().addSingletonResource(personResource);
и добавил следующее.
@Inject
private PersonResource personResource;
Но это приводит к NullPointerException
в последней строке setup
.
Разреженная документация о насмешках не очень полезна. Кто-нибудь может указать, где я иду не так? Спасибо.