我们的情景: -
我们有一个模块(在java中)用Junit进行测试。该模块基本上将文件作为输入,处理它们,然后将数据写入Hazelcast。这些输入文件是从内部URL下载的。
在我们的Junit测试中(完全是一个单独的测试项目,即junit测试不在待测试的模块中),我们无权访问这些文件所在的URL。
问题: -
- >为了向模块提供输入文件,使用.properties文件,在该文件中指定它是物理位置。这是模块本身的InputFileUrl字段。
- >在Module的某处,将读取此Url(来自.properties文件),然后将添加一些额外的参数。然后模块尝试将其称为Url并下载输入文件。从Test项目,我们无法访问此URL。所以我们为这些输入文件提供以下文件的静态地址:
var clickHandler = function() {
document.getElementById('dropbtn').innerHTML = current.innerHTML;
};
var dropdown = document.getElementById('dropdown');
var filterItem = dropdown.getElementsByTagName('LI')
for (var i = 0; i < filterItem.length; i++) {
var current = filterItem[i];
current.addEventListener('click', clickHandler, false);
}
- &GT;问题是,当一些额外的参数被添加到模块中的上述URL时,它自然会变成无效的URL并抛出异常。如果我们将模块注释的一部分添加到这些额外参数中,我们可以从我们的测试项目中成功运行模块。 (只有一行通信)
所以 1)如何在不更改模块代码本身的情况下解决此URL访问问题?
WireMock技术在这里有用吗?我读了一下它并且不确定它是否对这种情况有用,因为这里是要在Test下模拟的内部URL。
答案 0 :(得分:0)
是的,使用Wiremock,您可以设置一个存根服务器,该服务器使用您要为模块提供的xml进行响应。因此,对于测试,您将设置
InputFileUrl = http://<wiremockurl>
wiremockurl通常是“localhost”,但您可以使用固定的IP /域名独立运行wiremock。
Stubbing然后就像这样:
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参数。