Как имитировать сервисы с помощью Arquillian?

Можно ли использовать какой-то фреймворк с Arquillian, или как именно имитировать внедренные EJB? Я знаю, что с использованием CDI (Contexts and Dependency Injection) можно вводить альтернативы в тест. Но без CDI в качестве механизма внедрения, когда я использую только EJB-инъекцию, как это возможно?

Недавно я протестировал свои EJB с макетной реализацией служебного интерфейса следующим образом:

// Service inteface 
public interface Audit {
   void audit(String info);
}

// Mock implementation
@Stateless
public class MockAuditBean implements Audit {

    public static String lastInfo = null;

    @Override
    public void audit(String info) {
        this.lastInfo = info;
    }
}

// assert in test
assertTrue(MockAuditBean.lastInfo.contains("dummy"));

Этот подход возможен, но требует много кастомные макетные реализации. Что хуже, внедренные экземпляры моков являются прокси-серверами и используют служебный интерфейс. Их нельзя использовать для имитации класса реализации для сравнения результатов. Могут использоваться только статические члены и методы фиктивной реализации.

Я тестировал также другие возможности для установки связанных EJB вручную. У этого подхода есть несколько недостатков. Это требует, чтобы целевой EJB теста имел для них не закрытые члены или сеттеры. Когда целевой EJB полагается на аннотацию жизненного цикла @PostConstruct, вы должны вызвать ее после ручной настройки «инъекции». Это требует, чтобы целевой EJB теста имел для них не закрытые члены или сеттеры. Когда целевой EJB полагается на аннотацию жизненного цикла @PostConstruct, вы должны вызвать ее после ручной настройки «инъекции». Это требует, чтобы целевой EJB теста имел для них не закрытые члены или сеттеры. Когда целевой EJB полагается на аннотацию жизненного цикла @PostConstruct, вы должны вызвать ее после ручной настройки «инъекции». Преимуществом этого решения является возможность использовать макетные фреймворки, такие как mockito или jMock.

Есть ли у кого-нибудь опыт, которым можно поделиться, как протестировать и настроить такой интеграционный тест, или даже использовать в нем макетные фреймворки?

15
задан skaffman 20 June 2011 в 13:22
поделиться