【发布时间】:2021-12-27 14:58:25
【问题描述】:
我正在开发具有HttpTrigger 的 xUnit for .NET CORE Azure 函数。我设法模拟了希望在正文中接收数据但在查询字符串中苦苦挣扎的 HttpTrigger。我在测试类之外创建了通用函数,以便其他 Azure Functions 测试可以使用它。
我需要帮助来为接受查询字符串的 HttpRequest 创建模拟。我相信需要模拟 IQueryCollection 的 Setup 类型
Azure 函数
[FunctionName("MyFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "DELETE")] HttpRequest req,
[ServiceBus("MyServiceBus", Connection = "MyServiceBusConn")] IAsyncCollector<Message> servicebusMessage)
{
string sessionId = string.Empty;
var DateTimeNow = DateTime.Now;
sessionId = req.Query["sessions"]; //Mock to return this??
}
为 HttpRequest Body 创建 Mock 的方法
public Mock<HttpRequest> CreateMockRequest(object body)
{
var memoryStream = new MemoryStream();
var writer = new StreamWriter(memoryStream);
var json = JsonConvert.SerializeObject(body);
writer.Write(json);
writer.Flush();
memoryStream.Position = 0;
var mockRequest = new Mock<HttpRequest>();
mockRequest.Setup(x => x.Body).Returns(memoryStream);
mockRequest.Setup(x => x.ContentType).Returns("application/json");
return mockRequest;
}
需要以下方法的帮助
为 HttpRequest 查询字符串创建 Mock 的方法
public Mock<HttpRequest> CreateQueryMockRequest(object body)
{
var memoryStream = new MemoryStream();
var writer = new StreamWriter(memoryStream);
var json = JsonConvert.SerializeObject(body);
var mockRequest = new Mock<HttpRequest>();
mockRequest.Setup(x => x.Query).Returns(json); // This doesn't work??
mockRequest.Setup(x => x.ContentType).Returns("application/json");
return mockRequest;
}
测试类
[Fact]
public void Function_ShouldReturn_XYZ()
{
//Arrange
var providerSessionId = RingGoExemptionTestData.GetProviderSession(); //GetProviderSession() implementation below
Mock<HttpRequest> mockHttpRequest = httpResquestFactory.CreateQueryMockRequest(providerSessionId); // this is where I am trying to use method define above
}
查询字符串的Dto对象
public static RingGoSession GetProviderSession()
{
var ringGoSession = new RingGoSession
{
RingGoRef = "232d3f"
};
return ringGoSession;
}
【问题讨论】:
-
考虑使用
DefaultHttoContext并根据需要填充所需的成员。将节省您必须模拟所有这些成员。只设置你需要使用的。 -
感谢您的帮助,我已将答案放在下面;
标签: c# .net-core azure-functions moq xunit