Java Arquillian:结合本地代码和容器代码
我正在与Arquillian一起使用JBoss7托管容器。我正在编写一个测试来执行以下操作:Java Arquillian:结合本地代码和容器代码,java,jboss,jboss7.x,jboss-arquillian,Java,Jboss,Jboss7.x,Jboss Arquillian,我正在与Arquillian一起使用JBoss7托管容器。我正在编写一个测试来执行以下操作: 在本地准备测试,而不是在JBoss服务器上 在JBoss服务器上运行测试 验证输出,而不是在JBoss服务器上 这是我的第一次尝试: @RunWith(Arquillian.class) public class NotWorking { @Inject private Service service; @Deployment public static Archi
- 在本地准备测试,而不是在JBoss服务器上
- 在JBoss服务器上运行测试
- 验证输出,而不是在JBoss服务器上
@RunWith(Arquillian.class)
public class NotWorking {
@Inject
private Service service;
@Deployment
public static Archive<?> createDeployment() {
// ...
}
@Test
public void testService() throws Exception {
prepare();
service.executeService();
validate();
}
@RunAsClient
public void prepare() throws Exception {
LocalOnlyClass.prepare();
}
@RunAsClient
public void validate() throws Exception {
LocalOnlyClass.validate();
}
}
@RunWith(Arquillian.class)
公共课不起作用{
@注入
私人服务;
@部署
公共静态存档createDeployment(){
// ...
}
@试验
public void testService()引发异常{
准备();
service.executeService();
验证();
}
@RunaClient
public void prepare()引发异常{
LocalOnlyClass.prepare();
}
@RunaClient
public void validate()引发异常{
LocalOnlyClass.validate();
}
}
不幸的是,这不起作用。Arquillian试图在服务器上运行准备和验证,但找不到LocalOnlyClass。我可以按如下方式让它工作,但它很难看:
@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Working {
@Inject
private Service service;
@Deployment
public static Archive<?> createDeployment() {
// ...
}
@Test
@RunAsClient
public void testService1Prepare() throws Exception {
LocalOnlyClass.prepare();
}
@Test
public void testService2Test() throws Exception {
service.executeService();
}
@Test
@RunAsClient
public void testService3Validate() throws Exception {
LocalOnlyClass.validate();
}
}
@RunWith(Arquillian.class)
@FixMethodOrder(MethodSorters.NAME\u升序)
公共阶级工作{
@注入
私人服务;
@部署
公共静态存档createDeployment(){
// ...
}
@试验
@RunaClient
public void testService1Prepare()引发异常{
LocalOnlyClass.prepare();
}
@试验
public void testService2Test()引发异常{
service.executeService();
}
@试验
@RunaClient
public void testService3Validate()引发异常{
LocalOnlyClass.validate();
}
}
有谁知道有更好的方法来避免“假”测试吗?我不太确定你的评论: 不幸的是,这不起作用。阿奎利安试图经营这个公司 在服务器上进行准备和验证,但找不到 LocalOnlyClass
如果您的问题真的在于代码的执行位置,我不认为JUnits
@FixMethodOrder
会有什么不同。它只是强制执行测试的执行顺序。Arquillian的@InSequence
注释也可以实现同样的效果,这是我在您的案例中推荐的注释。谢谢您的评论。你说得很对,@FixMethodOrder
本身并不能解决问题。解决方法是将@RunAsClient
放在@Test
方法而不是非测试方法周围。然后使用@FixMethodOrder
以及测试的命名来确保一切都以正确的顺序运行。