У меня часто есть EJB, зависящие от нескольких (например, 5-10) других компонентов EJB/CDI, и многие методы используют только их подмножество. Интеграционное тестирование (мы используем Arquillian со встроенным контейнером Glassfish 4.0) болезненно, потому что мне все еще нужно предоставить зависимости для всего графа классов. Я добавляю классы один за другим в архив ShrinkWrap, потому что добавление целых пакетов создало еще больше зависимостей и я не хочу добавлять все классы, потому что это значительно увеличивает время, необходимое для выполнения одного теста. Я также не хочу, чтобы для каждого теста добавлялись все классы, особенно те, которые затрагивают файловую систему или выполняют команды оболочки.
Если граф зависимостей растет, я создаю фиктивные объекты, просто реализуя интерфейс EJB с методами, выбрасывающими UnsupportedOperationExceptions, но это становится утомительным, потому что их много и трудно поддерживать изменения имен классов (вы ожидаете, что существует DummyMyService для MyService , но так как он был переименован из OldService, вы создадите еще один фиктивный, потому что вы не нашли DummyOldService).
Можно ли автоматически создавать фиктивные классы (ничего не делая или генерируя исключения UnsupportedOperationException) для интеграционных тестов компонентов EJB/CDI? Что-то типа:
ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClass(MyTestedService.class)
.addClass(ImportantDependency.class)
.addClass(Dummy.createDummy(DependencyNeededForSomeMethods.class));
для такого класса, когда я хочу только протестировать метод doImportantThings:
@Stateless
public class MyTestedService {
@Inject
private ImportantDependency importantDependency;
@Inject
private DependencyNeededForSomeMethods dependencyNeededForSomeMethods;
public void doImportantThings(){
....
importantDependency.doIt();
....
}
public void doSomethingElse(){
....
dependencyNeededForSomeMethods.doRarelyNeededThings();
....
importantDependency.doAnotherThing();
}
}
Или, может быть, есть другой способ справиться с этим (кроме рефакторинга тестируемых классов)?