Можно ли использовать какую-то насмешливую фреймворк с Аркиллиан, или точно, как насмехаться с введенными EJB? Я знаю, что с использованием CDI (Contexts and Dependency Injection) можно вводить альтернативы в тест. Но без CDI в качестве механизма впрыска, когда я использую только инъекцию EJB, как это возможно?
Недавно я проверил свои EJB с помощью mock-реализации служебного интерфейса следующим образом:
// 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"));
Этот подход возможен, но требует множества пользовательских макетных реализаций. Что еще хуже, инъецированные экземпляры mocks являются прокси-серверами и используют сервисный интерфейс. Их нельзя отбрасывать, чтобы высмеять класс реализации для сравнения результатов. Могут использоваться только статические элементы и методы макетной реализации.
Я также проверил еще одну возможность установки связанных EJB вручную. Этот подход имеет несколько отклонений. Для этого требуется, чтобы целевой EJB теста имел для них не-частные члены или сеттеры. Когда целевой EJB опирается на аннотацию жизненного цикла @PostConstruct, вы должны вызвать его после настройки ручного "инъекции". Преимуществом этого решения является возможность использования макетных фреймворков, таких как mockito или jMock.
Попросите кого-нибудь поделиться опытом, как тестировать и настраивать такой интеграционный тест, или даже использовать в нем насмешливые фреймворки?