我试图测试,使得两个连续的Web请求的方法。如何嘲笑两个连续的Web请求
到现在为止,我只用this solution using an object called 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);
}
哪个没有按没有工作。
在此先感谢
你可以发布你想测试,而不是伪的实际代码?我有一个答案,但有太多的假设,我不得不作出,因为我第二次猜测你实际测试 – levelnis
我刚刚发布的实际代码。我只是在同一个方法中创建两个Web请求。如果我创建一个,那么测试通过,但如果我创建两个,那么TestWebRequest将返回相同的响应。我不能让它以特定的顺序返回两个不同的响应 – Nick