我将WireMock
作为单个WAR部署到服务器。我按照提供的sample-war project进行了WAR工作。这非常有用,因此感谢您的示例。
我的应用程序唯一的问题是WireMock从WAR内部读取映射和配置文件。
这些文件的路径可以通过WireMockFileSourceRoot
文件中的web.xml
上下文参数进行配置,但是只有当该路径指向位于WAR中的目录时,它才有效。
我想将映射文件和响应文件保存在磁盘上的单独文件夹中。
我已经检查了源代码,并且如我所见,WireMock使用ServletContextFileSource
类从Servlet上下文读取映射文件。此类扩展了AbstractFileSource
。
我找到了一个不错的候选者SingleRootFileSource
,它也扩展了相同的抽象类,对我来说,该类可以从磁盘上的任何目录中读取映射文件,但我不知道如何将WireMock设置为使用此类代替默认类。
能请你把我带到正确的方向吗?
答案 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/