Модульное тестирование для метода Extension с использованием moq - PullRequest
0 голосов
/ 02 ноября 2019

Я пишу модульный тест для функции uploaddocuments () для azuresearch.

Unsupported expression: ... =>
....Index(It.IsAny<IndexBatch<Document>>(),
It.IsAny<SearchRequestOptions>()) Extension methods (here:
DocumentsOperationsExtensions.Index) may not be used in setup /
verification expressions.

Не уверен, почему это не работает.

код:

    private static async Task uploaddocuments(ISearchIndexClient indexClient)
    {

    var actions = new IndexAction<Hotel>[]
    {

      IndexAction.Upload(
       new Hotel()
       {
           HotelId = "1",
                HotelName = "Secret Point Motel",
                Description = "The hotel is ,

                Rating = 3.6,
                Address = new Address()
                {
                    StreetAddress = "677 5th Ave",
                    City = "New York",
                    StateProvince = "NY",
                    PostalCode = "10022",
                    Country = "USA"
                }

         }
       )
    }
    var batch = IndexBatch.New(actions);
    try
    {
           indexClient.Documents.Index(batch);
    }
    catch (IndexBatchException e)
    {
          console.log(e);
    }
}

Тест:

var testMock = new Mock(IDocumentsOperations)();

docOperationsMock.Setup(() => Index(It.IsAny(IndexBatch<Document))(), It.IsAny<SearchRequestOptions)())).Returns(new DocumentIndexResult());


  var mock = new Mock<ISearchIndexClient>()

            .Setup(x => x).Returns(It.IsAny(SearchIndexClient)());

             .SetupGet(a => a.Documents).Returns(It.IsAny("IDocumentsOperations")())

             .Callback(() => IndexBatch.Upload(It.IsAny(IEnumerable(dynamic))()));

            .Returns(testMock.Object);

1 Ответ

1 голос
/ 05 ноября 2019

Вы не можете напрямую макетировать статический метод (например, метод расширения) с помощью фреймворк-фреймворка. Вы можете использовать некоторую оболочку для достижения того же самого. Мы не можем (по умолчанию) насмехаться над статическим вызовом - это жесткая связь, которую трудно сломать.

Вот очень хорошая статья, в которой показан способ создания оболочки для статического метода, который может помочь намв этом сценарии:

http://adventuresdotnet.blogspot.com/2011/03/mocking-static-methods-for-unit-testing.html

В качестве альтернативы вы можете использовать PEX или MOLES для достижения того же результата, вы можете прочитать его далее в следующем документе:

https://www.microsoft.com/en-us/research/project/pex-and-moles-isolation-and-white-box-unit-testing-for-net/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fpex%2Fdownloads.aspx

Надеюсь, это поможет.

...