В настоящее время я пишу тесты для простого веб-приложения на основе джерси и сталкиваюсь со странной проблемой, когда разные методы тестирования в одном классе используют разные конфигурации. Конкретно у меня есть класс обслуживания:
@Path("service")
public class WebService {
@Inject
private ApplicationData data;
@GET
@Path("/single/{id}")
public Result singleDo(@PathParam("id") String id) {
logger.info("appData: " + data.getClass().getCanonicalName());
// actually do things
}
@POST
@Path("/bulk")
public Result[] bulkDo(String[] ids) {
logger.info("appData: " + data.getClass().getCanonicalName());
// actually do things
}
Этот класс в настоящее время работает в живой среде. Для обработки разных переменных состояния между обучением и тестированием у меня есть два разных класса ApplicationData
, ApplicationData
и TestApplicationData
, которые являются подклассом ApplicationData
. Мой тестовый класс:
public class TestWebService extends JerseyTest {
@Override
protected Application configure() {
ResourceConfig rc = new WebApplication(new TestApplicationData());
rc.register(WebService.class);
return rc;
}
@Test
public void testSingle() {
target("/service/single/1234").request().get();
// this uses TestApplicationData, according to logs
}
@Test
public void testBulk() {
String[] list = new String[1];
list[0] = "1234";
target("/service/bulk").request().post(Entity.entity(list, MediaType.APPLICATION_JSON);
// this uses ApplicationData, according to logs, and does not have information from TestApplicationData
}
}
Мне не ясно, как или почему эти два метода используют разные экземпляры ApplicationData
или как второй метод даже получает доступ к не тестовому экземпляру.
Почему это так, и что я должен сделать, чтобы это исправить?