Webリクエストを送信してレスポンスを受け取るメソッドをテストします。 しかし、これは直接発生するのではなく、要求を作成して送信する別のクラスを使用します。さらに、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'を使用しています。 https://github.com/Moq/moq4/wiki/Quickstart#callbacks – Nkosi
本当に魅力的に働いてくれてありがとう。 – zlZimon