我有一个非常具体的测试用例:
- 我必须部署 JAR
- 做一些测试的东西
- 部署另一个 JAR
- 再做一些测试
JAR 必须按此特定顺序部署(我不能在调用测试方法之前同时部署两者)
您知道在某些类似 JUnit 的环境中执行此类场景的任何方法吗?我知道 1. 绝对可以在 Arquillian 中完成,但我不知道是否有可能在测试方法中执行另一个部署。
我有一个非常具体的测试用例:
JAR 必须按此特定顺序部署(我不能在调用测试方法之前同时部署两者)
您知道在某些类似 JUnit 的环境中执行此类场景的任何方法吗?我知道 1. 绝对可以在 Arquillian 中完成,但我不知道是否有可能在测试方法中执行另一个部署。
您可以在 Arquillian 中使用 TestMethod 中的 Deployer api 执行此操作。
首先,您必须将 @Deployment 定义为不受 Arquillian 管理:
@Deployment(name = "X", managed = false)
public static WebArchive manualDeployment() {
return ShrinkWrap.create(WebArchive.class)....
}
下一步是注入一个 Deployer:
@ArquillianResource
private Deployer deployer;
然后从您的 @Test 方法中,您可以调用:
@Test
public void shouldBeAbleToDeploy() {
deployer.deploy("X")
}
如果您的部署 X 设置为容器内测试(@Deployment.testable=true(默认行为)),您可以在刚刚部署的部署中执行下一个 @Test 方法。
@Test
public void shouldBeAbleToDeploy() {
deployer.deploy("X");
}
@Test @OperateOnDeployment("X")
public void shouldNowBeInDeploymentX() {
// we're now inside X
}
默认情况下,JUnit TestMethods 以随机顺序执行,但 Arquillian JUnit 集成提供了一个 @InSequence(n) 注释,您可以使用它来强制执行顺序。
@Test @InSequence(1)
public void shouldBeAbleToDeploy() {
deployer.deploy("X");
}
@Test @InSequence(2) @OperateOnDeployment("X")
public void shouldNowBeInDeploymentX() {
// we're now inside X
}
测试方法刚刚执行 - 而且,您必须能够从那里进行部署。如果您已经通过设置阶段测试设置了部署的东西,那么它是否可以通过测试很容易