我正在编写一些单元测试(我只是其中的新手),并希望能够创建一个RestSharp模拟来构建各种HTTP请求。
目前我正在使用基于Restsharp的三个接口; IRestClient
,IRestRequest
和IRestResponse
我理解的模拟的前提是通过伪造返回可预测的结果,而我在通过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);
答案 0 :(得分:2)
Mock<T>
允许您定义模拟的行为,但不代表实际的模拟实例。因为要返回IRestResponse
类型的对象,而不是Mock<IRestResponse>
,请使用Mock<T>.Object
属性来获取类型为T
的实例:
clientMock
.Setup(f => f.Execute(It.IsAny<IRestRequest>()))
.Returns(responseMock.Object);