Допустим, у нас есть вложенные инъекции, и я хочу только протестировать класс MyService в тесте Arquillian, но только для ServiceB, а НЕ для serviceA, потому что он выходит за рамки теста, который я хочу выполнить, а также имеет много зависимостей добавить в WebArchive, например:
.addClasses(serviceC.class, serviceCImpl.class)
.addClasses(serviceD.class, serviceDImpl.class)
Попытка протестировать некоторые из этих сервисов может занять много времени, выбирая правильные зависимости, которые должны быть включены.
Есть ли способ имитировать службу A, чтобы она не была включена в webArchive, не запрашивая все эти файлы классов?
class MyServiceImpl{
@Inject
ServiceA serviceA;
@Inject
ServiceB serviceB;
}
interface MyService{}
interface ServiceA{}
interface ServiceB{}
interface ServiceC{}
interface ServiceD{}
class ServiceAImpl{
@Inject
ServiceC serviceC;
}
class ServiceAAlternative{
//just a mock class without other @Inject
}
class ServiceBImpl{
@Inject
ServiceD serviceD;
}
In arquillian:
Создание, возможно, реализации bean-компонента @Alternative или @Specializes (serviceAAlternative) и сохранение его в тестовом пакете можно использовать для MockPurposes. Это правильный подход? Хотя таким образом я не избегаю добавления всех зависимостей, необходимых для serviceAImpl.
@Deployment
public static WebArchive createDeployment() {
WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
.addClasses(MyService.class, MyServiceImpl.class)
.addClasses(ServiceA.class, ServiceAImpl.class, ServiceAAlternative.class)
.addClasses(ServiceB.class, ServiceBImpl.class)
.addClasses(ServiceC.class, ServiceCImpl.class)
.addClasses(ServiceD.class, ServiceDImpl.class)
.addAsWebInfResource("test-beans.xml", "beans.xml");
return war; }
Arquillian WebArchive, который я хочу иметь, без вложенной инъекции ServiceA, то есть Service C, и без ServiceAImpl и его зависимости. Есть идеи, как подойти к этой проблеме?
@Deployment
public static WebArchive createDeployment() {
WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
.addClasses(MyService.class, MyServiceImpl.class)
.addClasses(ServiceA.class, ServiceAAlternative.class)
.addClasses(ServiceB.class, ServiceBImpl.class)
.addClasses(ServiceD.class, ServiceDImpl.class)
.addAsWebInfResource("test-beans.xml", "beans.xml");
return war; }