我正在尝试测试一种发出两个连续 Web 请求的方法。
到目前为止,我只使用这个解决方案使用一个名为 TestWebRequest 的对象测试了单个请求,它就像单个请求的魅力一样。如果您不熟悉它,TestWebRequest 会拦截 Web 请求机制并在幕后工作以返回预期的响应。这使得在不使用模拟的情况下测试实际服务成为可能。
但是现在我的一种方法的逻辑已经变成了这样的东西(在伪代码中)
public void MakePayment(PaymentRequest request)
{
var statusRequest = webService.GetPaymentStatus(new PaymentStatusRequest()
{
OrderId = request.OrderId
});
if (statusRequest.StatusId != 100)
{
var responseXml = webService.GetResponse(GetRequestXml(request));
/*.. process response ..*/
}
}
有没有办法扩展TestWebRequest来处理两个请求,或者有没有可以用来测试这个方法的替代方法?
这是一个工作测试的例子:
[Test]
public void MakePayment()
{
var response = @"<XML>..</XML>";
TestWebRequest request = TestWebRequestCreate.CreateTestRequest(response);
var result = webService.MakePayment(1, new PaymentRequest());
var expectedResponse = new PaymentResponse()
{
Status = 23
};
Assert.AreEqual(expectedResponse, result);
}
现在,如果 MakePayment 突然发出两个请求,那么我们需要一种方法来模拟两个假响应,如下所示:
[Test]
public void MakePayment()
{
var response1 = @"<XML>..</XML>";
var response2 = @"<XML>..</XML>";
TestWebRequest request1 = TestWebRequestCreate.CreateTestRequest(response1);
TestWebRequest request2= TestWebRequestCreate.CreateTestRequest(response2);
var result = webService.MakePayment(1, new PaymentRequest());
var expectedResponse = new PaymentResponse()
{
Status = 23
};
Assert.AreEqual(expectedResponse, result);
}
这是行不通的。
提前致谢