2016-10-25 5 views
0

Я получаю сообщение об ошибке NotSupportedException в своем модульном тесте с использованием Moq.Moq возвращает NotSupportedException в SearchAsync <T> test

У меня есть следующее испытание, которое издевается над результатом.

public class Person 
{ 
    public string Id { get; set; } 
} 

[Test] 
public void List_Should_List_All_People() 
{ 
    //Arrange 
    const long total = 3; 
    var list = new List<Person>(); 
    var queryResponse = new Mock<Task<ISearchResponse<Person>>>(); 
    queryResponse.Setup(x => x.Result.Total).Returns(total); 

    for (var i = 0; i < total; i++) 
    { 
    list.Add(new Person { Id = Guid.NewGuid().ToString() }); 
    } 
    queryResponse.Setup(x => x.Result.Documents).Returns(list); 
    Thread.Sleep(2000); 

    _elasticClient.Setup(x => x.SearchAsync(It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>())).Returns(queryResponse.Object); 

    // Act 
    var response = _repository.List<Person>(); 

    //Assert 
    response.Count().Should().Be(3); 
} 

queryResponse.Setup (х => x.Result.Total) .Returns (всего); < - исключение выбрасывается

Неверная установка на невиртуальном (переопределение в VB) член: фиктивный => mock.Result

Он работает синхронно без каких-либо проблем.

Любые предложения, как обойти это исключение?

Как я могу установить его как виртуальный?

ответ

0

Вы издеваетесь над Task<ISearchResponse<Person>>, но не с результатом ISearchResponse<Person>.

Вот пример издевательства над результатом задачи; у вас нет всех типов, с которыми вы работаете в своем примере, поэтому я немного упростил это

async void Main() 
{ 

    var elasticClient = new Mock<IElasticClient>(); 

    //Arrange 
    const long total = 3; 
    var list = new List<Person>(); 
    for (var i = 0; i < total; i++) 
    { 
     list.Add(new Person { Id = Guid.NewGuid().ToString() }); 
    } 

    var searchResponse = new Mock<ISearchResponse<Person>>(); 
    searchResponse.Setup(x => x.Total).Returns(total); 
    searchResponse.Setup(x => x.Documents).Returns(list); 

    _elasticClient.Setup(x => x.SearchAsync(It.IsAny<Func<SearchDescriptor<Person>, ISearchRequest>>())) 
        .ReturnsAsync(searchResponse.Object); 

    // Act 
    var response = await elasticClient.Object.SearchAsync<Person>(s => s.MatchAll()); 

    //Assert 
    // outputs 3 
    Console.WriteLine(response.Documents.Count()); 
} 

public class Person 
{ 
    public string Id { get; set; } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^