【发布时间】:2014-01-30 15:47:33
【问题描述】:
我试图让所有这些不同的东西一起工作以进行一些单元测试。
所以基本的程序结构是简单的 Servlet 3.0,在 TomCat 上作为 WebApp maven 原型运行。使用 Weld 作为 CDI 的实现,将服务对象注入 Servlet。
这一切都在运行。
我目前的问题在于单元测试。我不想运行集成测试,所以我想使用依赖注入将一些模拟服务对象添加到服务并伪造一些 API 调用。
所以我尝试了一些这样的方法: https://community.jboss.org/wiki/CreatingUnitTestsWithWeldAndJunit4 为了让 JUnit 自定义运行器来运行 CDI,但这总是无法将任何东西实际注入到我实例化的 Servlet 对象中,但它可以注入到 Test 类本身中。
所以我正在尝试使用 Arquillian 阅读文档: http://arquillian.org/guides/getting_started/?utm_source=cta
但是我无法让它运行,因为它要么找不到容器,要么我得到错误无法创建类 org.jboss.arquillian.test.impl.EventTestRunner 的新实例
马文:
<dependencies>
<!-- Testing dependencies -->
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.2.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<version>2.0.2</version>
<!-- 2.0.0-beta-4 is not working ** we are using old version -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.descriptors</groupId>
<artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>
<version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-api-maven</artifactId>
<version>2.1.0-alpha-1</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.arquillian.container</groupId>
<artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
<scope>test</scope>
<version>1.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-core</artifactId>
<version>2.1.2.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>2.1.2.Final</version>
</dependency>
<!-- Servlet 3.0 APIs -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>7.0.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
测试代码:
@RunWith(Arquillian.class)
public class TestSessionServlet {
@Deployment
@OverProtocol("Servlet 3.0")
@TargetsContainer("weld")
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClass(JedisSessionDao.class)
.addAsLibraries(resolver.artifact("org.jboss.weld.servlet:weld-servlet"))
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsManifestResource("in-container-context.xml",
"context.xml").setWebXML("in-container-web.xml");
}
@Test
public void testServlet() throws Exception {
Assert.fail("Not yet implemented");
}
这是正确的方法还是我真的需要使用 Tomcat 嵌入式容器?这似乎是集成测试。我的计划是使用 Mockito 创建伪造的 HttpRequest 和 Response 对象,并将 Response Writer 重定向到 StringWriter。我让所有的部分都在运行它只是我无法管理的 CDI。
提前致谢
【问题讨论】:
标签: java maven servlets jboss-weld jboss-arquillian