2014-01-30 5 views
0

Я пытаюсь собрать все эти несопоставимые вещи, которые работают вместе для некоторых модульных испытаний.Объединение Arquillian, JUnit, Servlet 3.0 и Weld

Таким образом, основная структура программы проста Servlet 3.0, работающая на TomCat как архаид WebApp maven. Использование Weld в качестве реализации CDI для ввода служебных объектов в Servlets.

Что все работает.

В настоящее время моя проблема связана с модульными испытаниями. Я не хочу запускать тесты интеграции, поэтому я хочу использовать инъекцию зависимостей, чтобы добавить в сервисы некоторые объекты-объекты «mock Service» и подделать некоторые вызовы 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 и перенаправить Response Writer на 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> 
Смежные вопросы