Configuration Dropwizard集成测试:未找到配置资源文件

Configuration Dropwizard集成测试:未找到配置资源文件,configuration,dropwizard,integration-testing,Configuration,Dropwizard,Integration Testing,我正在尝试使用以下应用程序规则组装Dropwizard集成测试: public静态最终DropwizardAppRule规则=新建DropwizardAppRule( MyApplication.class、ResourceHelpers.resourceFilePath(“config_for_test.yml”); 运行测试时,出现以下错误: java.lang.IllegalArgumentException: resource config_for_test.yml not found

我正在尝试使用以下应用程序规则组装Dropwizard集成测试:

public静态最终DropwizardAppRule规则=新建DropwizardAppRule(
MyApplication.class、ResourceHelpers.resourceFilePath(“config_for_test.yml”);
运行测试时,出现以下错误:

java.lang.IllegalArgumentException: resource config_for_test.yml not found.
完整堆栈跟踪是:

java.lang.ExceptionInInitializerError
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
    at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1082)
    at java.lang.reflect.Field.getFieldAccessor(Field.java:1063)
    at java.lang.reflect.Field.get(Field.java:387)
    at org.junit.runners.model.FrameworkField.get(FrameworkField.java:69)
    at org.junit.runners.model.TestClass.getAnnotatedFieldValues(TestClass.java:156)
    at org.junit.runners.ParentRunner.classRules(ParentRunner.java:215)
    at org.junit.runners.ParentRunner.withClassRules(ParentRunner.java:203)
    at org.junit.runners.ParentRunner.classBlock(ParentRunner.java:163)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:308)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    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)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: resource config_for_test.yml not found.
    at io.dropwizard.testing.ResourceHelpers.resourceFilePath(ResourceHelpers.java:23)
    at de.emundo.sortimo.resource.TaskAdditionTest.<clinit>(TaskAdditionTest.java:28)
    ... 18 more
Caused by: java.lang.IllegalArgumentException: resource ../config_for_test.yml not found.
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
    at com.google.common.io.Resources.getResource(Resources.java:197)
    at io.dropwizard.testing.ResourceHelpers.resourceFilePath(ResourceHelpers.java:21)
    ... 19 more
java.lang.ExceptionInInitializeError
在sun.misc.Unsafe.EnsureClassified(本机方法)
位于sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
位于sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
位于java.lang.reflect.Field.acquireFieldAccessor(Field.java:1082)
位于java.lang.reflect.Field.getFieldAccessor(Field.java:1063)
位于java.lang.reflect.Field.get(Field.java:387)
位于org.junit.runners.model.FrameworkField.get(FrameworkField.java:69)
位于org.junit.runners.model.TestClass.getAnnotatedFieldValues(TestClass.java:156)
位于org.junit.runners.ParentRunner.classRules(ParentRunner.java:215)
位于org.junit.runners.ParentRunner.withClassRules(ParentRunner.java:203)
位于org.junit.runners.ParentRunner.classBlock(ParentRunner.java:163)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:308)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
原因:java.lang.RuntimeException:java.lang.IllegalArgumentException:resource config_for_test.yml找不到。
在io.dropwizard.testing.ResourceHelpers.resourceFilePath(ResourceHelpers.java:23)
位于de.emundo.sortimo.resource.TaskAdditionTest.(TaskAdditionTest.java:28)
... 还有18个
原因:java.lang.IllegalArgumentException:resource../config\u for_test.yml未找到。
位于com.google.common.base.premissions.checkArgument(premissions.java:145)
位于com.google.common.io.Resources.getResource(Resources.java:197)
在io.dropwizard.testing.ResourceHelpers.resourceFilePath(ResourceHelpers.java:21)
... 还有19个

据我所知,我应该只使用父文件夹
。/config\u for_test.yml
。但是,这并不能解决问题。

好的,我只是自己找到了一个解决方案。因此Dropwizard将在
${basedir}/src/test/resources
中查找配置文件,因为这是maven查找任何文件的默认目录。另一方面,当应用程序运行时,默认目录只是
${basedir}
。因此,以下方法将有所帮助:

  • 只需使用
    。/../../config\u进行_test.yml
    进行集成测试
  • 将配置文件移动到
    ${basedir}/src/test/resources
    目录
  • 我使用了方法2,并进一步将_release.yml对应的
    config_移动到
    src/main/resources
    ,以获得对称的文件结构。但是,当程序在正常模式下运行时(使用参数
    server config\u for_release.yml
    ),这会使basedir目录为空。因此,我们可以将参数调整为
    server src/main/resources/config\u for_release.yml
    。由于我不喜欢在方法启动时使用如此长的路径,因此我选择了不同的解决方案:我使用将文件复制到目标文件夹:

    
    maven资源插件
    2.7
    复制资源
    验证
    复制资源
    ${basedir}/目标
    Åsrc/主要/资源
    真的
    **/*yml先生
    
    然后,该程序将通过
    server target/config\u for_release.yml
    启动。我使用目标文件夹主要是为了将配置文件隐藏在Eclipse的PackageExplorer的相应文件夹中,并且不会意外地打开错误的配置文件