2011-11-29 14 views
1

我有一个非常具体的测试情况:在测试用例部署文物 - 的JBoss AS

  1. 我必须部署JAR
  2. 做一些测试的东西
  3. 部署另一个JAR
  4. 多做一些测试

JAR必须按此特定顺序进行部署(我无法在调用测试方法之前部署两者)

您是否知道在某些类似JUnit的环境中执行此类场景的方法? 我知道1.可以在Arquillian中完成,但我不知道是否有可能在测试方法内执行另一个部署。

回答

0

测试方法刚刚执行 - 此外,您必须能够从那里进行部署。如果您已经通过设置阶段测试设置了相关测试,那么测试是否可行很容易

+0

我知道该方法刚刚执行。我想知道是否有方法来配置Arquillian(或其他测试环境)来在测试方法中执行部署。在Arquillian中,您可以使用@Deployment定义多个部署,并选择在测试方法调用期间使用哪一个部署。如果没有这种可能性,我不得不编写服务器相关代码来部署东西,这是我想避免的。 – Pidzama

3

您可以在您的TestMethod中使用Deployer api在Arquillian中执行此操作。

首先你要确定你的@Deployment不通过的Arquillian进行管理:

@Deployment(name = "X", managed = false) 
public static WebArchive manualDeployment() { 
    return ShrinkWrap.create(WebArchive.class).... 
} 

下一个步骤将是注入部署:从您的@Test方法中

@ArquillianResource 
private Deployer deployer; 

然后您可以拨打电话:

@Test 
public void shouldBeAbleToDeploy() { 
    deployer.deploy("X") 
} 

如果您的部署X设置为容器内测试(@ Deployment.t estable = true(默认行为)),您可以在刚刚部署的部署中执行下一个@Test方法。

@Test 
public void shouldBeAbleToDeploy() { 
    deployer.deploy("X"); 
} 

@Test @OperateOnDeployment("X") 
public void shouldNowBeInDeploymentX() { 
    // we're now inside X 
} 

默认的JUnit TestMethods以随机顺序执行,但JUnit的的Arquillian集成提供了一个@InSequence(n)的注释,你可以使用强制执行的顺序。

@Test @InSequence(1) 
public void shouldBeAbleToDeploy() { 
    deployer.deploy("X"); 
} 

@Test @InSequence(2) @OperateOnDeployment("X") 
public void shouldNowBeInDeploymentX() { 
    // we're now inside X 
}