我的JEE 6应用程序正在使用CDI,以及带有嵌入式tomee(1.7.2)的Arquillian来测试它。 在具有多个测试方法的测试类中,同一个Request Scoped Bean实例正在多个测试方法中注入。 当应用程序部署在独立的tomee plus 1.7.2上时,问题不会发生。
根据arquillian documentation,请求范围的bean实例只应用于一个testmethod。不幸的是,在Arquillian文档中没有提到嵌入式自身。这是tomee嵌入式的已知限制吗?如果没有,如何解决?
服务类:
@RequestScoped
public class SomeService
{
private String user;
public String execute(final String pNewUser)
{
if(user == null){
user = pNewUser;
}
return user;
}
}
测试班:
@RunWith(Arquillian.class)
public class TestCase
{
@Inject
private SomeService someService;
@Deployment
public static WebArchive createDeployment()
{
return DefaultMicroDeploymenCreator.createDefaultMicroDeplymentWithFileName("TestCase.war");
}
@Test
public void testFirstTestMethod() throws Exception
{
String username = someService.execute("User A");
Assert.assertEquals(username, "User A");
}
@Test
public void testSecondTestMethod() throws Exception
{
String username = someService.execute("User B");
Assert.assertEquals(username, "User B");
}
}
第一个测试执行成功,第二个测试失败。
答案 0 :(得分:4)
你的考试中有arquillian.xml
吗?它应该有
<defaultProtocol type="Servlet 3.0" />
激活请求范围迭代。 您可能还需要将以下依赖项添加到测试中:
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
</dependency>
请注意,将<protocol type="Servlet 3.0" />
添加到
<container>
元素仅配置(不选择)已选择的协议。如果没有选择使用协议
<defaultProtocol>
,然后使用容器的默认值。
答案 1 :(得分:0)