#java #unit-testing #osgi #apache-felix #pax-exam
#java #модульное тестирование #osgi #apache-felix #pax-экзамен
Вопрос:
Я использую экзамен Pax (3.5.0) для своих модульных тестов OSGi. Я создал тест, но когда я его запускаю, я получаю эту трассировку стека:
java.lang.NoClassDefFoundError: org/apache/felix/dm/DependencyActivatorBase
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279)
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1374)
at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4329)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2141)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.felix.dm.DependencyActivatorBase not found by com.company.wine.infrastructure [19]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 14 more
Я настроил CoreOptions.mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager", "3.1.0")
параметры и вижу, что org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.swissbox.extender.BundleWatcher] : Scanning bundle [org.apache.felix.dependencymanager]
они загружены.
Тем не менее, я получаю исключение. Кто-нибудь знает, что я делаю не так?
Приветствия.
Комментарии:
1. Есть ли у вас импорт для него в вашем пакете? Является ли этот тест интеграционным тестом или вы используете его как модульный тест?
2. Я использую его в качестве модульного теста. Импорт пакета в моем пакете сделал трюк для модульного теста. Однако я не понимаю, почему это работает, когда я развертываю его в Felix без этого импорта.
Ответ №1:
Вы должны различать способ разработки экзамена Pax и то, как вы его использовали. Основной вариант использования экзаменов Pax — использовать его в интеграционном тесте, где вы тестируете ранее созданный артефакт. Если вы хотите протестировать его в том же модуле, у вас есть два способа сделать это.
1) на этапе тестирования интеграции maven путем ссылки на артефакт новой сборки через file: dependency .
2) путем создания крошечного пакета, содержащего ваши тестируемые классы и другие артефакты. Для этого потребуется также изменить импорт / экспорт пакетов в вашем тесте. Пример выполнения этого можно найти здесь