从另一个模拟中返回Moq实例

时间:2013-11-24 03:03:32

标签: c# rest dependency-injection mocking restsharp

我正在编写一些单元测试(我只是其中的新手),并希望能够创建一个RestSharp模拟来构建各种HTTP请求。

目前我正在使用基于Restsharp的三个接口; IRestClientIRestRequestIRestResponse

我理解的模拟的前提是通过伪造返回可预测的结果,而我在通过Moq和Ninject为此构建模拟时遇到了麻烦。

就目前而言,我从内核中获得以下检索;

//Create RESTful interface ecosystem (RestRequest => RestClient => RestResponse)
var clientMock = _kernel.GetMock<IRestClient>();
var requestMock = _kernel.GetMock<IRestRequest>();
var responseMock = _kernel.GetMock<IRestResponse>();

每当我执行responseMock方法时,我基本上都需要返回clientMock.Execute(IRestRequest)

这是正确的做事方式,因为我无法通过此代码模拟responseMock的返回;

clientMock.Setup(f => f.Execute(It.IsAny<IRestRequest>())).Returns(responseMock);

1 个答案:

答案 0 :(得分:2)

Mock<T>允许您定义模拟的行为,但不代表实际的模拟实例。因为要返回IRestResponse类型的对象,而不是Mock<IRestResponse>,请使用Mock<T>.Object属性来获取类型为T的实例:

clientMock
    .Setup(f => f.Execute(It.IsAny<IRestRequest>()))
    .Returns(responseMock.Object);