Java 使用Wiremock存根-使用除_文件以外的BodyFile位置

Java 使用Wiremock存根-使用除_文件以外的BodyFile位置,java,stubbing,wiremock,Java,Stubbing,Wiremock,Wiremock文档规定withBodyFile中指定的文件位置应位于src/test/resources/\uu文件中。我希望文件位于src/test/resources/Testing\u ABC/Testcase2/myfile.xml中。 我有什么办法可以做到这一点吗?我试着跟随,但似乎不起作用 stubFor(get(urlPathEqualTo("/abc")).willReturn (aResponse().withHeader("Content-T

Wiremock文档规定withBodyFile中指定的文件位置应位于src/test/resources/\uu文件中。我希望文件位于src/test/resources/Testing\u ABC/Testcase2/myfile.xml中。

我有什么办法可以做到这一点吗?我试着跟随,但似乎不起作用

stubFor(get(urlPathEqualTo("/abc")).willReturn
                (aResponse().withHeader("Content-Type",
                        "text/xml; charset=utf-8").withHeader
                        ("Content-Encoding",
                                "gzip")
                        .withBodyFile
                                ("src/test/resources/Testing_ABC/Testcase2/myfile.xml)));
但是,当我将文件放在src/test/resources/_files/myfile.xml中并相应地更改路径时,它可以正常工作


我只是想知道我是否可以让wiremock在资源(而不是_文件)中的其他目录中进行查看,以便在项目中具有良好的资源结构。

这似乎是创建规则时需要配置的内容。试一试

@Rule
public final WireMockRule rule = new WireMockRule(WireMockConfiguration.wireMockConfig()
  .withRootDirectory("src/test/resources/Testing_ABC"));

然后您可能可以在测试中使用
.withBodyFile(“Testcase2/myfile.xml)

我正在使用这个Kotlin配置类来定制根目录。 它仍然要求响应文件位于_files目录中

@Configuration
class Config: WireMockConfigurationCustomizer {
    override fun customize(config: WireMockConfiguration?) {
        config!!.withRootDirectory("customer-client/src/test/resources")
    }
}

@AutoConfigureWireMock

用于Java&Spock,但仍使用
\u文件
文件夹

@TestConfiguration
public class WireMockConfig {

    @Bean
    public WireMockConfigurationCustomizer wireMockConfigurationCustomizer() {
        return config -> {
            config.withRootDirectory("src/integration-test/resources");
        };
    }
}
然后,如果您有
ApplicationContext
初始值设定项:

@SpringBootTest(classes = [Application.class, WireMockConfig.class], webEnvironment = RANDOM_PORT)
@ContextConfiguration()
abstract class WireMockIntegrationSpec extends Specification {
}
然后在你的测试中:

@AutoConfigureWireMock(port = 9089)
@Unroll
class ApplicationSpec extends WireMockIntegrationSpec {

    def "Some test" () {
    }
}
您的资源将从
src/integration test/resources/\u文件中提供。

确保此目录结构存在

根据您的需要,您应该能够更改资源位置。请记住,这会更改
资源
目录中所有文件的位置。您希望使用其他位置的原因是什么?@a.Kootstra-为什么要问?因为这个原因可能会在另一种方式,考虑到这是在软件中硬编码的,应该考虑到这一点。谢谢你的回答Henri。我尝试了你的建议。但是看起来wiremock在src/test/resources/Testing\u ABC/\u files/Testcase2/myfile.xml中搜索文件。所以它希望以某种方式使用\u files目录,这是我想要避免的。