0

シナリオ:特定のパラメーターがリクエストに設定されている、提供されたIRestclientを使用してクラスがRestRequestを発行することを検証します。

    public class MyClass {
    private readonly IRestClient _client;

    public MyClass(IRestClient client) {
        _client = client;
    }

    void DoIt() {
        var req = new RestRequest { Method = WebMethod.Get, Path = "/DoIt" };
        req.AddParameter("key1", "value1");
        req.AddParameter("key2", "value2");

        var resp = _client.Request(req);
    }

}

[TestFixture]
public class MyClassTests {
    [Test]
    public void VerifyDoIt() {
        var client = MockRepository.GenerateStrictMock<IRestClient>();
        var resp = new RestResponse { StatusCode = HttpStatusCode.OK };
        client.Expect(x => x.Request(null)).IgnoreArguments().WhenCalled(inv => {
            var req = inv.Arguments[0] as RestRequest;
            //NO WAY TO VALIDATE THAT PARAMETERS HAS BEEN SET!
            inv.ReturnValue = resp;
        });
    }
}

ハンモックはこの方法でテストできないだけですか、それとも私は何か重要なものを見逃していますか?

編集:これは、Rhino.Mocksを使用してメソッドパラメーターにアクセス/検証する方法についての質問ではなく、Hammockが単体テストシナリオで設定されている要求パラメーターのテスト/検証をサポートする方法/かどうかについての質問です。

4

1 に答える 1

0

モック/スタブ化されたメソッドに送信されたパラメーターを検証する必要がある場合は、Rhino.Mocks の「GetArgumentsForCallsMadeOn」メソッドを使用できます。行われた呼び出しを表すラムダを渡すと、ギザギザの配列が返されます。最初の要素 ([0]) は、メソッドが最初に呼び出されたときに渡された引数の配列になります。2 番目の要素 ([1]) は、メソッドが 2 回目に呼び出されたときに渡された引数の配列になります。

リクエスト データを検証するために、次のようにテストを書き直すことができます。

var client = MockRepository.GenerateStub<IRestClient>();

var mc = new MyClass(client);
mc.DoIt();

client.AssertWasCalled(c => c.Request(null), o => o.IgnoreArguments());
var req = (RestRequest)client.GetArgumentsForCallsMadeOn(c => c.Request(null), o => o.IgnoreArguments())[0][0];

Assert.AreEqual("/DoIt", req.Path);
Assert.AreEqual(WebMethod.Get, req.Method);
于 2011-11-03T12:07:18.470 に答える