2015-05-25 5 views
0

У меня есть служба, использующая Джерси, которая пишет/читает из файла JSON, и у меня есть тестовый файл, расширяющий класс JerseyTest для тестирования этого сервиса.Различное поведение в тестах Джерси

То, что я пытаюсь сделать, - это при запуске теста писать или читать в другом файле (с именем «_test» в имени). Таким образом, у меня нет значений, измененных из основного файла.

Файл быть инстанс в методе @PostConstruct подобное:

@PostConstruct 
public void init() { 
    try { 
     jsonFile = new NewsJson(); // Need to have a different behavior for testing 
    } catch (IOException ioe) { 
     LOGGER.error("Error creating file: " + ioe.getMessage()); 
    } 
} 

То, что я пытался это вызвать метод @post, что изменить переменную jsonFile, активируя сочинительство в другом файле. Проблема в этом решении - это метод @PostConstruct, называемый каждым запросом.

Как я могу изменить это поведение? Есть ли другая аннотация для инициализации сервисов с использованием Джерси?

+0

Действительно ли вы хотите инициализировать файл в конструкции? Почему вы не можете создать этот файл в своей самой операции POST? Вы можете отличать тестовые и производственные запросы на основе некоторого HTTP-заголовка и изменять создание jsonFile? – Optional

ответ

0

И добавить на мой комментарий, так как это выглядит как ответ:

Если вы действительно хотите, чтобы он построен только один раз изменить масштаб для @Scope («одиночки»), что приведет к джерси «боб» в экземпляр один раз вместо запроса.

+0

В этом случае, как я могу обрабатывать несколько одновременных запросов? –

0

У меня есть приемлемое решение. Идея добавить параметр заголовка для каждого запроса очень помогла. Я создал супер-класс под названием Service, имеющие параметры заголовка, как этот:

@HeaderParam("testing") 
private boolean testing; 

После этого я создал тоже метод IsTesting(), чтобы получить значение этого переменный. Так что в моих службах (NewsService) Я расширяю класс службу супер и на нем @PostConstruct метод, который я сделал это:

if (isTesting()) { 
    jsonFile = new NewsJson(NewsJson.TEST_FILE); 
} else { 
    jsonFile = NoticiaJson(); 
} 

Все я должен был изменить мои методы модульного тестирования, добавив переменный заголовок по запросу:

webResource.header("testing", true) 
+0

Хорошо, вот что я имел в виду в своем комментарии изначально. – Optional

+0

Спасибо за это! –

Смежные вопросы