在我的代码中的某处,我执行以下代码来获取uri以进行记录:
//mumble/core/... //your_workspace_name/...
我有一些因此而中断的单元测试,所以我尝试模拟这样做:
string uri = restClient.BuildUri(request).ToString();
但是我收到:
var restClientMock = new Mock<RestClient>();
restClientMock
.Setup(client => client.BuildUri(It.IsAny<IRestRequest>()))
.Returns(new Uri("http://localhost:8080/"))
.Verifiable();
我是Xunit的新手,我不知道如何解决这个问题。
答案 0 :(得分:2)
错误消息是正确的。 RestClient.BuildUri
是非虚拟成员。
/// <summary>
/// Assembles URL to call based on parameters, method and resource
/// </summary>
/// <param name="request">RestRequest to execute</param>
/// <returns>Assembled System.Uri</returns>
public Uri BuildUri(IRestRequest request)
{
DoBuildUriValidations(request);
var applied = GetUrlSegmentParamsValues(request);
string mergedUri = MergeBaseUrlAndResource(applied.Uri, applied.Resource);
string finalUri = ApplyQueryStringParamsValuesToUri(mergedUri, request);
return new Uri(finalUri);
}
Moq无法模拟非虚拟/抽象成员。
您的类不应与实现问题/具体概念紧密联系,而应与抽象紧密联系。
在这种情况下,您应该使用IRestClient
的来源RestClient
。
这将允许正确配置测试
//...
var restClientMock = new Mock<IRestClient>();
restClientMock
.Setup(client => client.BuildUri(It.IsAny<IRestRequest>()))
.Returns(new Uri("http://localhost:8080/"))
.Verifiable();
//...