ActiveJDBC和Junit中的动态检测问题

时间:2019-06-13 07:08:32

标签: java intellij-idea activejdbc

我对activeJdbc相对较新,想在Intellij中使用Junit测试我的模型。最初,我遇到了静态检测的问题-因此我遵循GitHub上的指南来使用动态检测。

我在IntelliJ中设置了Junit测试,并为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 :(得分:0)

动态工具会在将类的字节码加载到运行时时对其进行更改。它是在Java 8之前设计的。不幸的是,Java 8 Lambda功能还破坏了类字节码,这造成了我们无法解决的字节码检测错误的讨厌冲突。因此,动态检测功能将从ActiveJDBC中提取,仅保留静态检测作为选项。

我们建议仅切换到静态检测。

答案 1 :(得分:0)

您必须配置IntelliJ IDEA才能将IDE生成/运行操作委托给Gradle(请参阅选项首选项|生成,执行,部署|生成工具| Gradle | Runner |委托IDE生成/运行操作以进行gradle)。

这在我的环境中有效:IDEA Ultimate 2018.3,Gradle 4.10.3,JUnit 5,ActiveJDBC 2.2