如何从磁盘读取映射和响应文件

时间:2018-11-05 18:04:14

标签: java mocking wiremock

我将WireMock作为单个WAR部署到服务器。我按照提供的sample-war project进行了WAR工作。这非常有用,因此感谢您的示例。

我的应用程序唯一的问题是WireMock从WAR内部读取映射和配置文件。 这些文件的路径可以通过WireMockFileSourceRoot文件中的web.xml上下文参数进行配置,但是只有当该路径指向位于WAR中的目录时,它才有效。

我想将映射文件和响应文件保存在磁盘上的单独文件夹中。

我已经检查了源代码,并且如我所见,WireMock使用ServletContextFileSource类从Servlet上下文读取映射文件。此类扩展了AbstractFileSource

我找到了一个不错的候选者SingleRootFileSource,它也扩展了相同的抽象类,对我来说,该类可以从磁盘上的任何目录中读取映射文件,但我不知道如何将WireMock设置为使用此类代替默认类。

能请你把我带到正确的方向吗?

1 个答案:

答案 0 :(得分:0)

首先,您需要将SingleRootFileSource读取的文件转换为StubMappings。例如:

SingleRootFileSource stubsFolder = new SingleRootFileSource("my/path/to/jsons/with/recorded/stubs")
stubsFolder.listFilesRecursively().each { TextFile stubFile ->
StubMapping mapping = StubMapping.buildFrom(stubFile.readContentsAsString());
...

然后你需要在Wiremock服务器中注册它们。有几种方法可以做到。线模服务器和客户端都可以注册存根。不知道你如何运行测试,但如果你需要每个测试用例不同的存根,你可能必须注册存根使用客户端(使用 com.github.tomakehurst.wiremock.client.WireMock.stubFor)。如果您决定使用 stubFor,则必须引入将 StubMapping 转换为 MappingBuilder 的简单适配器,因为 stubFor 仅采用 MappingBuilder 作为参数。示例适配器:

public class MappingBuilderAdapter implements MappingBuilder {
    StubMapping stubMapping;

    @Override
    public StubMapping build() {
        return this.stubMapping;
    }
    
    ...

客户端必须在调用 stubFor 之前连接到服务器。检出 configureFor 方法以从 Wiremock 客户端进行连接,在 [Configuring WireMock using the Java client] 中描述:http://wiremock.org/docs/running-standalone/