2015-05-16 2 views
0

Я работаю с Arquillian с управляемым контейнером JBoss 7. Я пишу тест, чтобы сделать следующее:Arquillian: объединение локального и контейнерного кода

  • Подготовьте тест локально, а не на сервере JBoss.
  • Запустите тест на сервере JBoss.
  • Подтвердите вывод, а не на сервере JBoss.

Вот моя первая попытка в этом:

@RunWith(Arquillian.class) 
public class NotWorking { 
    @Inject 
    private Service service; 

    @Deployment 
    public static Archive<?> createDeployment() { 
     // ... 
    } 

    @Test 
    public void testService() throws Exception { 
     prepare(); 
     service.executeService(); 
     validate(); 
    } 

    @RunAsClient 
    public void prepare() throws Exception { 
     LocalOnlyClass.prepare(); 
    } 

    @RunAsClient 
    public void validate() throws Exception { 
     LocalOnlyClass.validate(); 
    } 
} 

К сожалению, это не работает. Аркиллиан пытается запустить подготовку и проверку на сервере и не находит LocalOnlyClass. Я могу получить эту работу следующим образом, но его уродливым:

@RunWith(Arquillian.class) 
@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class Working { 
    @Inject 
    private Service service; 

    @Deployment 
    public static Archive<?> createDeployment() { 
     // ... 
    } 

    @Test 
    @RunAsClient 
    public void testService1Prepare() throws Exception { 
     LocalOnlyClass.prepare(); 
    } 

    @Test 
    public void testService2Test() throws Exception { 
     service.executeService(); 
    } 

    @Test 
    @RunAsClient 
    public void testService3Validate() throws Exception { 
     LocalOnlyClass.validate(); 
    } 
} 

Кто-нибудь знает лучший способ сделать это, что позволяет избежать «поддельные» тесты?

ответ

0

Я не уверен ваш комментарий:

К сожалению, это не работает. Аркиллиан пытается запустить и проверить на сервере и не находит LocalOnlyClass.

Если ваша проблема действительно в том, где код выполняется, я не вижу, как JUnits @FixMethodOrder изменит ситуацию. Это просто заставляет выполнение выполнения тестов. То же самое можно сделать с аннотацией Arquillian's @InSequence, которую я бы рекомендовал в вашем случае.

+0

Спасибо за ваш комментарий. Вы совершенно правы, говоря, что '@ FixMethodOrder' сам по себе не исправляет проблему. Какие исправления он ставит '@ RunAsClient'around метод' @ Test', а не метод без тестирования. Затем '@ FixMethodOrder' вместе с именованием тестов используется, чтобы убедиться, что все работает в правильном порядке. – Adam

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