如何使用 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 还没有正式发布,官方扩展也不是很多。
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 的示例部分找到。
在 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 还没有正式发布,官方扩展也不是很多。
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
: 每次测试启动一个容器classPER_JVM
: 每个 JVM 启动一个容器AUTO
(默认):根据测试实例生命周期启动容器。
示例可以在 TomEE GitHub repository 的示例部分找到。