如何使用 JUnit5 测试 OpenEJB 中的 EJB Beans?

How to test EJB Beans in OpenEJB with JUnit5?

在 JUnit 4 中,我使用以下设置来测试我的 EJB bean:

@RunWith(EJBContainerRunner.class)
public class MyEETestWithOneOpenEJB {
    @Inject
    private ACdiBean bean;
 
    @Test
    public void theTest() {
        // do test
    }
}

但在 JUnit 5 中,不再有 @RunWith(...)

问题:如何使用 JUnit 5 进行测试?

您将需要编写自己的 EJBContainerExtension 来替换 Runner 或找到一个已经存在的。不幸的是,后者目前不太可能,JUnit5 还没有正式发布,官方扩展也不是很多。

If you want to, read about JUnit 5 extension model here

TomEE 8(自 8.0.7 起)仅支持使用 JUnit 5 进行测试(对 JUnit 4 没有瞬态依赖)。

传统方式

旧版 EJBContainerRunner 已被相关的 JUnit 5 扩展所取代。

如果您使用的是 Maven,则需要将以下依赖项添加到 pom 文件中:

    <dependency>
         <groupId>org.apache.tomee</groupId>
         <artifactId>openejb-junit5-backward</artifactId>
         <version>8.0.9</version>
         <scope>test</scope>
     </dependency>

随后,您可以替换

@RunWith(EJBContainerRunner.class)

@RunWithEjbContainer

这是一个纯 JUnit 5 扩展。无需将任何 JUnit 4 依赖项添加到您的 class 路径中。可以在 TomEE GitHub 存储库的 module's test source 中找到一个用法示例。

现代方式

在同一版本中,ApplicationComposer 得到增强以支持 JUnit 5 作为扩展。要使用它,请添加

    <dependency>
         <groupId>org.apache.tomee</groupId>
         <artifactId>openejb-junit5</artifactId>
         <version>8.0.9</version>
         <scope>test</scope>
     </dependency>

到您的class路径。 ApplicationComposer 不需要 class 路径扫描并且比上面提到的替代方法更快。

只需将 @RunWithApplicationComposer 添加到您的 JUnit 5 测试 class。默认情况下,容器生命周期与测试实例的生命周期绑定。但是,其他模式也可用:

  • PER_EACH: 每个测试方法启动一个容器
  • PER_ALL: 每次测试启动一个容器class
  • PER_JVM: 每个 JVM 启动一个容器
  • AUTO(默认):根据测试实例生命周期启动容器。

示例可以在 TomEE GitHub repository 的示例部分找到。