我有一个Spock集成测试,我用它来测试一个从特定目录加载一些文件的类。 MyClass使用@Value注释来定位要加载的文件:
@Value("${data.directory.path}")
String dataDirectoryPath;
在测试中,我试图将测试数据包含在类路径中,并希望覆盖指示目录所在位置的属性。
@SpringBootTest
@TestPropertySource(
properties = "data.directory.path=classpath:/test-data"
)
运行我的测试我可以看到我的yml文件中的属性确实已被覆盖,但新值是:' classpath:/ test-data'。 编辑:我希望该值是转换类路径的绝对路径。
我一直试图了解这是Spock问题还是Spring / Boot问题。据我所知,@ SpringBootTest应该创建一个ResourceLoader作为其上下文初始化的一部分,但是资源加载器似乎并没有对&#做事情。 #39;类路径:'前缀。
有没有人这样做或知道可能出错?
目前我在我的课程中添加了一个方法,允许直接设置要使用的路径。然后我可以在我的测试中使用以下内容:
def sut = new MyClass()
def "setup"() {
sut.setDataPath(Paths.get(getClass().getResource("/test-data").toURI()).toString())
}