我試圖讓所有這些不同的東西一起工作,爲一些單元測試。結合Arquillian,JUnit,Servlet 3.0和Weld
所以基本的程序結構是簡單的Servlet 3.0運行在TomCat上作爲WebApp的maven原型。使用Weld作爲CDI的實現將服務對象注入到Servlet中。
哪一個都在運行。
我現在的問題是在單元測試中。我不想運行集成測試,所以我想使用依賴注入向服務中添加一些模擬的服務對象,並僞造一些API調用。
所以我嘗試了一些方法是這樣的: https://community.jboss.org/wiki/CreatingUnitTestsWithWeldAndJunit4 爲了使一個可定製的運行用於JUnit的運行CDI,但是這始終未能真正注入任何東西到Servlet對象的實例化我,這可能注入測試上課本身雖然。
所以我想在經歷了文檔過的Arquillian: http://arquillian.org/guides/getting_started/?utm_source=cta
但是我不能得到這個運行,因爲它要麼找不到容器或者我得到錯誤無法創建新實例類org.jboss.arquillian.test.impl.EventTestRunner
Maven的:
<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對象,並將響應寫入器重定向到StringWriter。我把所有這一部分運行起來,這只是我無法管理的CDI。
在此先感謝