我经常有依赖于几个(如 5-10 个)其他 EJB/CDI bean 的 EJB,许多方法只使用其中的一个子集。集成测试(我们使用带有嵌入式 Glassfish 4.0 容器的 Arquillian)它们很痛苦,因为我仍然需要为整个类图提供依赖关系。我将类一一添加到 ShrinkWrap 存档中,因为添加整个包会创建更多的依赖项,我不想添加所有类,因为它显着增加了完成一项测试所需的时间。我也不希望为每个测试添加所有类,尤其是那些涉及文件系统或执行 shell 命令的类。
如果依赖关系图增长,我通过简单地实现 EJB 接口和抛出 UnsupportedOperationExceptions 的方法来创建虚拟对象,但这变得乏味,因为它们中有很多并且很难维护类名更改(您希望 MyService 存在一个 DummyMyService ,但由于它是从 OldService 重命名的,因此您将创建另一个虚拟对象,因为您还没有找到 DummyOldService)。
是否可以为 EJB/CDI Bean 的集成测试自动创建虚拟类(什么都不做或抛出 UnsupportedOperationExceptions)?就像是:
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();
}
}
或者也许有另一种方法来处理它(除了重构被测类)?