java-Arquillian在多个Testmethod中重用RequestScoped Bean
作者:互联网
我的JEE 6应用程序使用CDI以及带有嵌入式tomee(1.7.2)的Arquillian对其进行测试.
在具有多种测试方法的测试类中,同一请求范围Bean实例将注入多种测试方法中.
在独立tomee plus 1.7.2上部署应用程序时,不会发生此问题.
根据arquillian documentation,请求范围的Bean实例应仅用于一种测试方法.不幸的是tomee嵌入了它自己,而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");
}
}
执行的第一个测试是成功,第二个测试是失败.
解决方法:
您的测试中是否有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” />到
<容器>元素仅配置(不选择)已选择的协议.如果没有选择协议使用
< defaultProtocol> ;,则使用容器的默认值.
标签:java-ee-6,jboss-arquillian,tomee,java,java-ee 来源: https://codeday.me/bug/20191027/1946091.html