Spock类路径资源无法解析

时间:2017-02-27 23:12:24

标签: java groovy classpath spock

在Spock单元中测试一个方法,该方法在检索基于类路径的资源的方法中引入资源JSON文件...

Myclass.classpath.getResource('/someJsonfile.json') //Works in WAR arhcive, but fails during a spock test and returns null

上述方法不起作用,但在部署WAR

时,功能可以正常工作

以下在Spock中用于解析类路径资源,但是会破坏WAR的功能

System.getResource('/someJsonfile.json') //Works in spock test, but breaks functionality when inside WAR   

1 个答案:

答案 0 :(得分:0)

我通常在更大的项目中做的是:

  • 为测试资源创建单独的模块。顺便说一句,在那里你还可以提供基本的东西,如Spock扩展,基本规格,Geb配置,测试依赖。重要提示:在测试资源模块中,您将所有内容都放在src/main 而非 src/test下。您还可以使用compile test范围导入所有内容。然后从模块中创建一个普通的JAR。
  • 现在,您可以在需要的任何位置导入包含测试范围的测试资源模块。然后,您的资源加载问题也得到了解决,因为您始终可以依赖从JAR中提取的资源。
  • 您可能希望更进一步,还可以创建具有托管测试依赖关系的BoM(物料清单),在需要JUnit,Spock,Geb,Selenium等清洁版本管理的任何地方导入BoM。

因此,通过导入BoM,您可以获得版本管理,通过导入测试资源,您可以获得实际资源,测试依赖项和测试基类。结果是一组可重用的测试类和资源以及干净的导入模块。最后,但并非最不重要的是,无论您是在容器内部还是外部进行测试,都可以始终以相同的方式加载资源。

<强>更新

以下是

的链接

它非常简单,在企业环境中特别有用。