Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Rhino Mock断言Hammock RestRequest参数_C#_Rhino Mocks_Hammock - Fatal编程技术网

C# 使用Rhino Mock断言Hammock RestRequest参数

C# 使用Rhino Mock断言Hammock RestRequest参数,c#,rhino-mocks,hammock,C#,Rhino Mocks,Hammock,情景: 验证我的类是否向提供的IRestclient发出重新请求,其中在请求中设置了某些参数 public class MyClass { private readonly IRestClient _client; public MyClass(IRestClient client) { _client = client; } void DoIt() { var req = new RestRequest { Metho

情景: 验证我的类是否向提供的IRestclient发出重新请求,其中在请求中设置了某些参数

    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;
        });
    }
}
公共类MyClass{
专用只读IRestClient\u客户端;
公共MyClass(IRestClient客户端){
_客户=客户;
}
void DoIt(){
var req=new RestRequest{Method=WebMethod.Get,Path=“/DoIt”};
请求添加参数(“键1”、“值1”);
请求添加参数(“键2”、“值2”);
var resp=_客户端请求(req);
}
}
[测试夹具]
公共类MyClassTests{
[测试]
公共无效验证doit(){
var client=MockRepository.GenerateStrictMock();
var resp=new response{StatusCode=HttpStatusCode.OK};
Expect(x=>x.Request(null)).IgnoreArguments().WhenCalled(inv=>{
var req=inv.Arguments[0]作为重新请求;
//无法验证参数是否已设置!
inv.ReturnValue=resp;
});
}
}
吊床是不是就是不能用这种方式进行测试,还是我遗漏了一些关键的东西


编辑:这不是关于如何使用Rhino.Mocks访问/验证方法参数的问题,而是关于如何/如果Hammock支持测试/验证在单元测试场景中设置的请求参数。

如果需要验证发送到模拟/存根方法的参数,可以使用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);
var client=MockRepository.GenerateStub();
var mc=新的MyClass(客户);
mc.DoIt();
调用client.assertwas(c=>c.Request(null),o=>o.IgnoreArguments());
var req=(RestRequest)client.GetArgumentsForCallsMadeOn(c=>c.Request(null),o=>o.IgnoreArguments())[0][0];
aresequal(“/DoIt”,请求路径);
AreEqual(WebMethod.Get,req.Method);

那么您想检查DoIt()方法中创建的“req”变量的值吗?对不起,我现在意识到我的问题有点不清楚我想要什么解决方案。这更像是一个吊床问题,而不是犀牛。嘲笑的问题。吊床是否不支持这一点,或者吊床中是否有一些隐藏的功能,可以让人访问和验证这些东西。