Dan*_*sen 3 java java-ee-6 jboss-arquillian apache-tomee jakarta-ee
我的 JEE 6 应用程序使用 CDI 以及带有嵌入式 tomee (1.7.2) 的 Arquillian 来测试它。在具有多个测试方法的测试类中,同一个 Request Scoped Bean 实例被注入到多个测试方法中。当应用程序部署在独立的 tomee plus 1.7.2 上时,不会出现该问题。
根据arquillian 文档,请求范围的 bean 实例只能用于一种测试方法。不幸的是 tomee 嵌入了自己,Arquillian 文档中没有提到它。这是 tomee 嵌入的已知限制吗?如果没有,如何修复?
服务等级:
@RequestScoped
public class SomeService
{
private String user;
public String execute(final String pNewUser)
{
if(user == null){
user = pNewUser;
}
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
测试级:
@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");
}
}
Run Code Online (Sandbox Code Playgroud)
执行的第一个测试成功,第二个测试失败。
arquillian.xml你的测试中有吗?它应该有
<defaultProtocol type="Servlet 3.0" />
Run Code Online (Sandbox Code Playgroud)
激活请求范围迭代。您可能还需要将以下依赖项添加到您的测试中:
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
请注意,添加<protocol type="Servlet 3.0" />到
<container>元素仅配置(不选择)已选择的协议。如果使用 未选择协议
<defaultProtocol>,则使用容器的默认协议。
| 归档时间: |
|
| 查看次数: |
1439 次 |
| 最近记录: |