Я хочу протестировать метод, который отправляет WebRquest и получает ответ. Однако это не происходит напрямую, вместо этого он использует другой класс, который строит запрос и отправляет его. Кроме того, класс HttpRequest
использует обратный вызов для ответа, который был передан из «класса здания», который получил его из метода, который я хочу проверить.Как протестировать метод с вложенным действием/обратным вызовом
Некоторый код прояснит ситуацию. (Упрощенный)
// this is the actual method I want to unit test
public void GetSomeDataFromTheWeb(Action<ResponseData> action, string data)
{
_webService.GetSomeDataFromTheWeb((req, resp) =>
{
// building the response depending on the HttpStatus etc
action(new ResponseData());
},data);
}
// this is the "builder method" from the _webService which I am gonna mock in my test
public void GetSomeDataFromTheWeb(Action<HTTPRequest, HTTPResponse> response, string data)
{
HTTPRequest request = new HTTPRequest(new Uri(someUrl)), HTTPMethods.Get,
(req, resp) =>
{
response(req, resp);
});
request.Send();
}
Я могу создать HttpResponse
, как это должно выглядеть, но я понятия не имею, как получить это «в» на response(req,resp)
вызов последнего метода.
Как я могу высмеять _webService
, что он вызывает правильный обратный вызов из метода, который я хочу протестировать с помощью HttpResponse
. Я собираюсь подать на мой модульный тест?
В основном что-то вроде этого:
[Fact]
public void WebRequestTest()
{
var httpresponse = ResponseContainer.GetWebRequestResponse();
var webserviceMock = new Mock<IWebService>();
//get the response somehow into the mock
webserviceMock.Setup(w=>w.GetSomeDataFromTheWeb(/*no idea how*/));
var sut = new MyClassIWantToTest(webserviceMock);
ResponseData theResult = new ResponseData();
sut.GetSomeDataFromTheWeb(r=>{theResult = r}, "");
Assert.Equal(theResult, ResultContainer.WebRequest());
}
Настройте 'GetSomeDataFromTheWeb' с' It.IsAny' аргументы и использовать 'Callback' на Setup, чтобы захватить действие и вызвать его с заглушками. https://github.com/Moq/moq4/wiki/Quickstart#callbacks – Nkosi
спасибо, что на самом деле работал как шарм. – zlZimon