簡體   English   中英

C#如何使用Xunit測試Jetbrains RESTClient

[英]C# How test Jetbrains RESTClient with Xunit

在我的代碼中的某處,我執行以下代碼來獲取uri以進行記錄:

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();

但我收到:

  Invalid setup on a non-virtual (overridable in VB) member: client => client.BuildUri(It.IsAny<IRestRequest>())

我是Xunit的新手,我不知道如何解決這個問題。

錯誤消息是正確的。 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();

//...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM