gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:25 26 4
gpt4 key购买 nike

我们的场景:-

我们有一个模块(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com