Класс сварки не найден при выполнении теста cdi-unit
У меня есть проект JEE, который плавно разворачивается на wildfly 10.
Я пытаюсь написать тесты junit для моих компонентов CDI с помощью библиотеки cdi-unit ( http://bryncooke.github.io/cdi-unit/)
мой pom.xml
выглядит следующим образом:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jglue.cdi-unit</groupId>
<artifactId>cdi-unit</artifactId>
<version>4.0.1</version>
<scope>test</scope>
</dependency>
Однако мой образец теста:
@RunWith(CdiRunner.class)
public class SampleTest {
@Inject
private Foo foo;
@Test
public void testFoo(){
foo.bar();
}
}
не удается инициализировать из-за отсутствия класса сварного шва:
java.lang.NoClassDefFoundError: org/jboss/weld/environment/se/Weld
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.getConstructor(Class.java:1825)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: org.jboss.weld.environment.se.Weld
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 17 more
В руководстве CDI-UNIT говорится, что оно автоматически использует свою собственную версию Weld, поэтому нет необходимости явно добавлять какие-либо библиотеки сварки в pom.xml.
Любая помощь, пожалуйста?
1 ответ
Вы должны включить в свои зависимости maven сварки.
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-core</artifactId>
</dependency>
добавьте подходящую версию, которую использует ваш сварщик.
Если вам нужно больше, чем моделирование CDI-контейнера, но у некоторых есть реалистичная симуляция EJB-функциональности, такая как постоянство, транзакционность, управляемые сообщениями bean-компоненты, попробуйте ejb-cdi-unit. Он получен из cdi-unit. Там вы также можете найти несколько примеров проектов, которые могут помочь с вашими проблемами cdi-unit.