gpt4 book ai didi

java - Arquillian 在多个测试方法中重用 RequestScoped Beans

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:37 26 4
gpt4 key购买 nike

我的 JEE 6 应用程序正在使用 CDI 以及带有嵌入式 tomee (1.7.2) 的 Arquillian 对其进行测试。在具有多个测试方法的测试类中,同一个 Request Scoped Bean 实例被注入(inject)多个测试方法。当应用程序部署在独立的 tomee plus 1.7.2 上时,不会出现此问题。

根据arquillian documentation一个请求范围的 bean 实例应该只用于一个测试方法。不幸的是,tomee 嵌入了它自己,它在 Arquillian 文档中没有提到。这是 tomee embedded 的已知限制吗?如果不是,如何解决?

服务类:

@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" /><container> element 只配置(不选择)一个已经选择的协议(protocol)。如果没有选择协议(protocol)使用 <defaultProtocol> ,然后使用容器的默认值。

关于java - Arquillian 在多个测试方法中重用 RequestScoped Beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33897229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com