java - Spring @ContextConfiguration 无法从不同项目加载测试上下文

标签 java spring testing

我正在从我的存储库项目编写集成测试,它需要加载我的基础设施项目的 IT 测试上下文,但由于某些原因,它因一些奇怪的异常而失败

 java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:673)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:480)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:306)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:241)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3217)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3224)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3224)
    at java.lang.Class.getAnnotation(Class.java:3176)
    at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:31)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestMethodReference.<init>(JUnit4TestMethodReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:54)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

我想添加的相同配置在 Infra 项目上运行良好。

为什么我不能在别处导入该配置?

这里是上下文配置:

 @ContextConfiguration(  classes = {InfraTestsContextConfiguration.class, RepositoryITContext.class, StandaloneDataSourceConfig.class, TransactionManagerConfig.class, LiquibaseConfig.class},
                   loader = AnnotationConfigContextLoader.class  )

我要加载的 InfraTestsContextConfiguration 是:

 @Configuration
@ComponentScan(basePackages = {"com.X.infra"},
excludeFilters = {@ComponentScan.Filter(pattern = "com.X.infra.spring.InfraContextConfiguration", type = FilterType.REGEX)})

在这里尽量说清楚,因为我自己也不太明白

谢谢

最佳答案

这听起来像是来自另一个项目的特定于测试的 @Configuration 类在类路径中不可见。例如,如果您的 InfraTestsContextConfiguration 不在 main 源代码文件夹中,则它可能不可见。因此,解决方案是让它们可见,实现这一点的方法取决于您的构建软件(例如 Maven)或您的 IDE(例如 Eclipse)。

这听起来与以下线程的评论中讨论的观点相似:https://stackoverflow.com/a/24703689/388980

关于java - Spring @ContextConfiguration 无法从不同项目加载测试上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675188/

相关文章:

java - Spring Batch header 处理程序问题

java - Spring Boot - 如何通过名称获取使用 @Service 注释的类

针对多种类型测试 QuickCheck 属性?

javascript - 如何使用 Cypress 断言 HTML 元素的高度或宽度大于指定数量?

python - Tox 失败,因为 setup.py 找不到 requirements.txt

java - 为什么 JavaFx 应用程序必须从其自己的类中启动?

java - DialogFragment(支持 v4)使应用程序崩溃(NPE)

java - Couchbase Java SDK 存储桶连接管理

java - 从 Spring 中的 gradle 子项目导入 JPA 模型

java - Snake - 按键响应时间慢