java - 在 junit 测试中通过 URL 提供 stub 文件 -wiremock

标签 java junit wiremock

我们的场景:-

我们有一个模块(java 语言)可以用 Junit 进行测试。该模块基本上将文件作为输入,对其进行处理,然后将数据写入 Hazelcast。这些输入文件是从内部 URL 下载的。

在我们的 Junit 测试(完全独立的测试项目,即 junit 测试不驻留在要测试的 mudule 中)中,我们无权访问这些文件所在的 URL。

问题:-

-> 为了向模块提供输入文件,使用 .properties 文件来指定它的物理位置。这是模块本身的 InputFileUrl 字段。

-> 在模块中的某个位置,将读取此 Url(从 .properties 文件),然后向其中添加一些额外的参数。然后模块尝试将此称为 Url 并下载输入文件。从测试项目中,我们无权访问此 URL。因此,我们为这些输入文件提供以下文件的静态地址:

InputFileUrl = file:///C:/Inputs/file.xml

-> 问题是,当模块中的上述 URL 添加一些额外的参数时,它自然会变成无效 URL 并抛出异常。如果我们在模块注释中添加这些额外参数,我们就可以成功运行测试项目中的模块。 (只需一根线通讯)

所以 1)如何在不更改模块代码本身的情况下解决这个 URL 访问问题?

WireMock 技术在这里有用吗?我读了一点关于它的内容,不确定它对于这种情况是否有用,因为这里要为测试中的模块模拟​​内部 URL。

最佳答案

是的,使用 Wiremock,您可以设置一个 stub 服务器,它响应您想要提供给模块的 xml。因此,对于您要设置的测试

InputFileUrl = http://<wiremockurl>

wiremockurl 通常是“localhost”,尽管您可以使用固定的 IP/域名独立运行wiremock。

stub 的工作原理如下:

stubFor(get(urlEqualTo("/api/specific-resource"))
    .willReturn(aResponse()
        .withBody("<xml1>..<xml1>")));

正如您在 wiremock documentation 中所读到的那样,您可以为许多附加查询参数返回相同的响应,也可以为特定的附加查询参数设置特定的响应。

// responds with same response regardless of query params
.urlEqualTo("/myurl\?.*")

// responds with special xml if additional query param "search_term" is present and matches given regex
.withQueryParam("search_term", matches("^(.*)wiremock([A-Za-z]+)$"))

您可以设置wiremock 以使用相同或不同的属性进行响应,以防模块添加额外的 URL 参数。

关于java - 在 junit 测试中通过 URL 提供 stub 文件 -wiremock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794682/

相关文章:

java - 使用可比

java - 如何在不点击屏幕的情况下放置对象

java - 使用 JUnit 进行容器内测试

spring-boot - 具有动态响应的Wiremock Standalone

java - 如何使用 Wiremock 在一个 json 文件中为同一 url 实现多 stub ?

java - 循环遍历 LinkedList

unit-testing - 如何将自定义XSL模板应用于Android Studio JUnit测试运行?

java - Junit 测试,其中一些参数不同而其他参数保持不变

testing - Spring cloud contract maven 插件没有将 jar 安装到本地 .m2 文件夹

java - 如果有 flash 插件,phantomjs 无法加载页面