在多个测试方法的Arquillian重用请求范围豆

问题描述 投票:3回答:2

我的JEE 6应用使用CDI,以及的Arquillian具有嵌入式tomee(1.7.2)进行测试。在测试级与多个测试方法中,相同的请求范围Bean实例在多个测试方法被注入。当应用程序部署在独立的tomee加1.7.2的问题不存在的。

按照arquillian documentation一个请求范围bean实例只能用于一个TestMethod的。不幸的是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"); 
    }
}

执行第一测试是成功,第二个失败。

java java-ee java-ee-6 jboss-arquillian tomee
2个回答
4
投票

你有arquillian.xml在你的测试?它应该有

<defaultProtocol type="Servlet 3.0" />

激活请求范围iteraction。你可能还需要以下依赖添加到您的测试:

<dependency>
    <groupId>org.jboss.arquillian.protocol</groupId>
    <artifactId>arquillian-protocol-servlet</artifactId>
</dependency>

请注意:添加<protocol type="Servlet 3.0" /><container>元素只配置(不选择)已选定的协议。如果没有协议,使用<defaultProtocol>选择,则使用该容器的默认。


0
投票

嵌入式tomee使用本地协议,在默认情况下,所以你不必测试方法之间的独立请求权,以造福于嵌入式情况。使用servlet的协议解决它。另一种方法是使用deltaspike cdictrl启动/停止@请求范围前/后@挂钩。

© www.soinside.com 2019 - 2024. All rights reserved.