编程语言
首页 > 编程语言> > java-Arquillian在多个Testmethod中重用RequestScoped Bean

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&gt ;,则使用容器的默认值.

标签:java-ee-6,jboss-arquillian,tomee,java,java-ee
来源: https://codeday.me/bug/20191027/1946091.html