使用Rhino Mocks断言Hammock RestRequest参数
本文关键字:RestRequest 参数 Hammock 断言 Rhino Mocks 使用 | 更新日期: 2023-09-27 18:13:07
场景:验证我的类是否使用所提供的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如何/是否支持在单元测试场景中设置请求参数的测试/验证。
如果需要验证发送到mocked/stubed方法的参数,可以使用Rhino.Mocks的"GetArgumentsForCallsMadeOn"方法。向它传递一个lambda,表示所进行的调用,它将返回一个锯齿状数组。第一个元素([0](将是第一次调用该方法时传递的参数数组。第二个元素([1](将是第二次调用该方法时传递的参数数组,等等
你可以像这样重新编写测试来验证请求数据:
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);