2014-01-30 35 views
0

我試圖讓所有這些不同的東西一起工作,爲一些單元測試。結合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。

在此先感謝

回答

0

確定什麼解決這對我來說正從:

<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.arquillian.container</groupId> 
     <artifactId>arquillian-weld-se-embedded-1.1</artifactId> 
     <scope>test</scope> 
     <version>1.0.0.CR7</version> 
    </dependency> 
相關問題