【问题标题】:Resuable CDI-Beans in Unit-Tests单元测试中的可重用 CDI-Bean
【发布时间】:2023-01-26 23:47:51
【问题描述】:

我有一个 JavaEE 应用程序,想在单元测试中使用 CDI。 目前我使用org.apache.openejb.junit5.RunWithApplicationComposer,我的单元测试如下所示:

@RunWithApplicationComposer(mode = ExtensionMode.PER_EACH)
@Classes(cdi = true, value = {
    A.class,
    B.class,
    C.class,
    ...
    Example.class
})
public class ExampleTest {

    @Inject
    private Example testInstance;

    @Produces
    public A produceA() {
        ...
    }

    @Test
    public void test() {
        assertEquals(4, testInstance.add(2, 2));
    }

}

这里我只想测试Example.class,但是Example.class要运行,A,B,C必须是可注入bean。

我的问题是 @Classes-Annotation 的可重用性。 在我的例子中,它不仅是A,B,C,而且我需要大约 20 个类来进行大量单元测试。我不想在每个单元测试中一次又一次地使用带有 20 个类的 @Classes 注释。

我已经尝试了一个带有 @Classes-Annotation 的 SuperClass,它被我的单元测试扩展了,但这不起作用。

您知道在单元测试中制作这 20 个类的可注入 bean 的更通用和可重用的方法吗?

谢谢你的帮助 :)

【问题讨论】:

    标签: java unit-testing cdi apache-tomee openejb


    【解决方案1】:

    我不肯定这会起作用,但你能试试抽象的父测试类吗?

    如果这不起作用,我想到的另一件事是制作一个注入所有 20 个类的虚拟 bean,然后将其放入类部分:

    @ApplicationScoped
    public class TestClassesConfigurationBean {
     @Inject private A a;
     @Inject private B b;
    .... 20x
    }
    
    @RunWithApplicationComposer(mode = ExtensionMode.PER_EACH)
    @Classes(cdi = true, value = { TestClassesConfigurationBean.class }
    })
    public class ExampleTest {
    

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2016-09-06
      • 2014-02-28
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2015-04-20
      相关资源
      最近更新 更多