【发布时间】:2019-02-18 14:08:11
【问题描述】:
我有一个带有动作功能的 API 控制器。此函数对另一个 API 进行外部调用以获取一些数据。这个外部调用是通过简单地创建一个带有 URL 的客户端来进行的。我想使用 WebApplicationFactory 创建一个测试来测试这个动作功能。 我想知道如何配置这个外部调用。表示服务器是否调用此 URL 返回此响应。
可能它应该在覆盖 ConfigureWebHost 的某个地方告诉服务器,如果你调用这个 URL(外部 API url)返回这个响应。
这是我要测试的控制器动作。
namespace MyAppAPI.Controllers
{
public class MyController : ControllerBase
{
[HttpPost("MyAction")]
public async Task MyAction([FromBody] int inputParam)
{
var externalApiURL = "http://www.external.com?param=inputParam";
var client = new HttpClient();
var externalResponse = await client.GetAsync(externalApiURL);
//more work with the externalResponse
}
}
}
这是我要使用的测试类
public class MyAppAPITests : IClassFixture<WebApplicationFactory<MyAppAPI.Startup>>
{
private readonly WebApplicationFactory<MyAppAPI.Startup> _factory;
public MyAppAPITests(WebApplicationFactory<MyAppAPI.Startup> factory)
{
_factory = factory;
}
[Fact]
public async Task Test_MyActionReturnsExpectedResponse()
{
//Arrange Code
//Act
//Here I would like to have something like this or a similar fashion
_factory.ConfigureReponseForURL("http://www.external.com?param=inputParam",
response => {
response.Response = "ExpectedResponse";
});
//Assert Code
}
}
Test_MyActionReturnsExpectedResponse 中的代码在任何地方都不存在,这正是我希望通过继承 WebApplicationFactory 或通过配置它来获得的。我想知道如何实现。即在 API 控制器进行外部调用时配置响应。 感谢您的帮助。
【问题讨论】:
标签: asp.net-mvc asp.net-core .net-core integration-testing xunit