C # Как тестировать Jetbrains RESTClient с помощью Xunit - PullRequest
0 голосов
/ 08 декабря 2018

Где-то в моем коде я делаю следующий код, чтобы получить 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 и не знаю, как решить эту проблему.

1 Ответ

0 голосов
/ 08 декабря 2018

Сообщение об ошибке верное.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();

//...
...