Я пытаюсь собрать все эти несопоставимые вещи, которые работают вместе для некоторых модульных испытаний.Объединение 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, которого я не мог справиться.
Заранее спасибо