0

我经常有依赖于几个(如 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();
    }
}

或者也许有另一种方法来处理它(除了重构被测类)?

4

2 回答 2

1

我认为,它没有提供这样的功能。这很可能是糟糕设计的标志。您应该更改包结构。然后仅使用所需的包创建包装。

于 2015-02-01T15:29:09.880 回答
0

我正在使用远程 EJB 调用而不是 Arquillian 进行集成测试。尽管我们必须为每个 bean 创建接口,但我们不需要为集成测试创建替代应用程序包,它为我的案例提供了更快的性能。但当然它不适用于 CDI bean。我发布了一篇关于我的案例的博客文章。

于 2015-02-24T07:12:27.457 回答