首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveJDBC和Junit中的动态插装问题

问ActiveJDBC和Junit中的动态插装问题
EN

Stack Overflow用户
提问于 2019-06-13 15:08:33
回答 2查看 204关注 0票数 0

我对activeJdbc比较陌生,想在Intellij中用Junit测试我的模型。一开始,我遇到了静态插装的问题-所以我遵循了GitHub上的指南来使用动态插装。

我在IntelliJ中设置了一个Junit测试,并向VM提供了以下参数:-javaagent:"/home/IdeaProjects/project/libs/activejdbc-instrumentation-2.2.jar"和-Dactivejdbc-instrumentation.log=true。

模型已插入仪器,但在测试中找不到。从日志中看,在测试已经开始时,检测似乎还没有完成。

这是我得到的堆栈跟踪:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 00:29:55

当类加载到运行时中时,动态插装会在类的字节代码中进行更改。它是在Java 8之前设计的。不幸的是,Java 8的Lambda特性也破坏了类字节码,这导致了一个严重的字节码冲突插装错误,我们永远无法解决。因此,动态插装功能将从ActiveJDBC中删除,只留下静态插装作为选项。

我们建议仅切换到静态插装。

票数 0
EN

Stack Overflow用户

发布于 2019-07-03 17:21:11

您必须配置IDE IDEA以将IntelliJ构建/运行操作委托给Gradle (请参阅选项首选项|构建、执行、部署|构建工具| Gradle |运行器|将IDE构建/运行操作委托给gradle)。

这适用于我的环境: IDEA旗舰版2018.3,Gradle 4.10.3,JUnit 5,ActiveJDBC 2.2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56575094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档