Проблемы с динамическими инструментами в ActiveJDBC и Junit - PullRequest
0 голосов
/ 13 июня 2019

Я относительно новичок в activeJdbc и хочу протестировать свои модели с помощью Junit в Intellij. Сначала я столкнулся с проблемами со статическими инструментами - поэтому я следовал руководству по GitHub , чтобы использовать динамические инструменты.

Я настроил тест Junit в IntelliJ и дал VM следующие аргументы: -javaagent:"/home/IdeaProjects/project/libs/activejdbc-instrumentation-2.2.jar" и -Dactivejdbc-instrumentation.log=true.

Модели оснащены приборами, но не обнаружены в тесте. Из журналов видно, что инструментарий еще не закончен, а тест уже начинается.

Это трассировка стека, которую я получил:

ActiveJDBC Instrumentation - You are using dynamic instrumentation...ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.EmailConfiguration
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.User
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.AuditLog
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.Tag
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.ChannelMessageActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.UserRole
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.MessageContent
ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.Channel
08:47:38.401 [main] INFO org.javalite.activejdbc.Configuration - Reading properties from: /database.properties. Will try classpath, then file system.

org.javalite.activejdbc.InitException: you are trying to work with models, but no models are found. Maybe you have no models in project, or you did not instrument the models. It is expected that you have a file activejdbc_models.properties on classpath

    at org.javalite.activejdbc.ModelFinder.findModels(ModelFinder.java:44)
    at org.javalite.activejdbc.Registry.init(Registry.java:126)
    at org.javalite.activejdbc.Registry.getMetaModel(Registry.java:103)
    at org.javalite.activejdbc.ModelDelegate.metaModelOf(ModelDelegate.java:307)
    at org.javalite.activejdbc.Model.<init>(Model.java:79)
    at team2.demo.ajdbcModels.AuditLog.<init>(AuditLog.java:5)
    at models.AuditLogTest.shouldValidateRequiredAttributes(AuditLogTest.java:16)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:78)
    at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:84)
    at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
    at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:161)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

ActiveJDBC Instrumentation - Instrumented model: team2.demo.ajdbcModels.MessageBox

Process finished with exit code 255

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Необходимо настроить IntelliJ IDEA для делегирования действий по сборке / запуску IDE в Gradle (см. Параметр «Параметры» | «Сборка, выполнение, развертывание | Инструменты сборки» | «Gradle» - «Запуск» | Передача действий по сборке / запуску IDE в gradle).

Это работает в моей среде: IDEA Ultimate 2018.3, Gradle 4.10.3, JUnit 5, ActiveJDBC 2.2

0 голосов
/ 13 июня 2019

Динамический инструментарий вносит изменения в байт-код классов по мере их загрузки во время выполнения.Он был разработан до Java 8. К сожалению, функция Java 8 Lambda также искажает байт-код класса, что привело к неприятному конфликту с инструментарием байт-кода, который мы так и не смогли устранить.Таким образом, функция динамического инструментария будет извлечена из ActiveJDBC, оставив в качестве опции только статическое инструментирование.

Мы предлагаем перейти только на статические приборы.

...