我有一个. net Core web API解决方案ReportService,它调用另一个API端点(我们可以调用这个PayrollService)来获取工资报告。所以我的要求是使用Wiremock.Net模拟PayrollService。
目前我还编写了一个自动化测试用例,它将直接调用ReportService控制器并执行所有服务逻辑,以及调用PayrollService和DB层逻辑的类,并将从ReportService获得HTTP结果。
请注意自动化测试用例是一个单独的解决方案。所以我的要求是像以前一样在ReportService上运行自动化测试用例,并且工资服务将由Wiremock模拟。
那么,需要在代码库中发生哪些更改呢?我们是否必须将ReportService的url更改为ReportService解决方案中的Wiremock服务器基url ?请让我们知道,请使用我在问题中使用的关于项目名称的术语,以便我清楚。
您的假设确实是正确的,您已经使ReportService
使用的基础URL可配置。
所以对于你的单元/集成测试,你可以提供WireMock。. Net服务器正在运行。
的例子:
[Test]
public async Task ReportService_Should_Call_External_API_And_Get_Report()
{
// Arrange (start WireMock.Net server)
var server = WireMockServer.Start();
// Setup your mapping
server
.Given(Request.Create().WithPath("/foo").UsingGet())
.RespondWith(
Response.Create()
.WithStatusCode(200)
.WithBody(@"{ ""msg"": ""Hello world!"" }")
);
// Act (configure your ReportService to connect to the URL where WireMock.Net is running)
var reportService = new ReportService(server.Urls[0]});
var response = reportService.GetResport();
// Assert
Assert.Equal(response, ...); // Verify
}