2013-10-14 3 views
1

Я пишу тесты с встроенным Arquillian. Но я столкнулся с проблемой, когда мой компонент находится в View Scope. Я просто разместил свой пример кода. Когда мой DataBean находится в ViewScope, он не запускается и выдает какое-то исключение. Но когда я изменил его на RequestScope, он работал отлично.Тест Arquillian не удался, когда bean в ViewScoped

@RunWith(Arquillian.class) 
public class MockTest { 

@Deployment  
    public static Archive<?> createDeployment() {   
     JavaArchive jar = ShrinkWrap.create(JavaArchive.class)     
      .addClass("pack.ui.DataBean")  
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");  
     return jar;  
    } 

@Inject  
private DataBean dataBean;  

@Test  
public void testDataBean() throws Exception {  

    dataBean.checkSystemStatus();  

    Assert.assertEquals(status, true);  

} 

@ViewScoped 
@Named("dataBean") 
public class DataBean { 
    public boolean checkSystemStatus() { 
     return true; 
    } 
} 

Может кто-нибудь рассказать, можем ли мы использовать ViewScope с Arquillian или что-то еще, что я должен делать.

ответ

1

Это потому, что область просмотра не активна во время вызова вашего теста. Чтобы запустить его таким образом, вам нужно использовать что-то вроде drone/graphene. Он неактивен, потому что HTTP-запрос, который выполняется, противоречит сервлету arquillian test runner, а не веб-странице вашего приложения. ViewScope специфичен для страницы вашего приложения.

0

Вы можете высмеять контекст JSF-контроллеров и избавиться от раздражающего исключения «Нет активных контекстов для типа области ViewScoped» во время выполнения Arquillian.

Проверить оригинальный проект для JSF 2.0: https://github.com/it-crowd/mock-contexts-extension

или мое обновление для JSF 2.2: https://github.com/kesha/mock-contexts-extension

Все, что вам нужно, это дополнительная аннотацию @ViewScopeRequired перед методом испытаний.