2015-12-01 3 views
2

Мне нужно написать тесты юнита для приложения Джерси. Теперь я хочу, чтобы проверить зависимость инъекций и проблема, я создал класс, как это:Класс def не найден: org/glassfish/hk2/ComponentException

@RunWith(Hk2Runner.class) 
public class BinderTest { 
    @Inject 
    private SomeClass someClass; 

    @Test 
    public void passingTest() { 
     someClass.getSomething("asd", "asd", "asd"); 
     Assert.assertTrue(true); 
    } 
} 

При запуске выход:

java.lang.NoClassDefFoundError: org/glassfish/hk2/ComponentException 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 

Я пытаюсь найти зависимость имея этот класс, чтобы добавить файл pom.xml, но ничего не нашел .. Вы, ребята, знаете, какая зависимость maven содержит упомянутый класс ComponentException?

Dependency добавлены для того, чтобы иметь Hk2Runner класс:

<dependency> 
    <groupId>org.glassfish.hk2</groupId> 
    <artifactId>auto-depends</artifactId> 
    <version>2.0.5</version> 
</dependency> 

ответ

2

Поскольку вы используете старую auto-depends зависимость, вы должны также добавить hk2-deprecated зависимость:

<dependency> 
    <groupId>org.glassfish.hk2</groupId> 
    <artifactId>hk2-deprecated</artifactId> 
    <version>2.0.5</version> 
    <scope>test</scope> 
</dependency> 

Другим решением было бы заменить auto-depends с новым hk2-testing и распространяется от класса org.jvnet.hk2.testing.junit.HK2Runner.

<dependency> 
    <groupId>org.glassfish.hk2</groupId> 
    <artifactId>hk2-testing</artifactId> 
    <version>2.3.0</version> 
    <scope>test</scope> 
</dependency> 
public class BinderTest extends HK2Runner { } 
+0

да теперь проблема с зависимостями решена :) Я оставил только hk2-junitrunner зависимость. Однако теперь проблема заключается в следующем: org.glassfish.hk2.api.UnsatisfiedDependencyException: не было объекта для инъекций в SystemInjecteeImpl (requiredType = CodeProvider, parent = BinderTest, qualifiers = {}, position = -1, optional = false, self = false, unqualified = null, 1047503754) Как я могу вводить классы в этот тестовый класс? – azalut

+0

@azalut Хмм, я не помню, будет ли автоматически вызываться 'before'. Вы должны попытаться переопределить 'before' и вызвать [' initialize'] (https://hk2.java.net/hk2-junitrunner/apidocs/org/jvnet/hk2/testing/junit/HK2Runner.html#initialize%28java. lang.String,% 20java.util.List,% 20java.util.List% 29), чтобы ваши классы '@ Service' искали (см. Javadoc). – Tunaki