Как использовать Moq для возврата списка данных или значений?

#testing #moq #using

#тестирование #moq #использование

Вопрос:

Кто-нибудь может сказать мне, как вернуть список данных, используя макет объекта, используя Moq framework и присвоив возвращаемый таким образом список данных другой переменной List<> .??

Комментарии:

1. Я использую макет объекта для вызова метода, который возвращает значения в форме List<> .

2. пожалуйста, добавьте несколько примеров кода. tinyurl.com/so-hints

Ответ №1:

 public class SomeClass
{
    public virtual List<int> GimmeSomeData()
    {
        throw new NotImplementedException(); 
    }
}

[TestClass]
public class TestSomeClass
{
    [TestMethod]
    public void HowToMockAList()
    {
        var mock = new Mock<SomeClass>();
        mock.Setup(m => m.GimmeSomeData()).Returns(() => new List<int> {1, 2, 3});
        var resultList = mock.Object.GimmeSomeData();
        CollectionAssert.AreEquivalent(new List<int>{1,2,3},resultList);
    }
}
  

Ответ №2:

@Richard Banks дал правильный ответ. Для полноты картины, если вы хотите использовать функциональные спецификации Moq v4 и избавиться от .Объект:

 void Main()
{
    var list = new List<int> { 1, 2, 3 };

    ISomeInterface implementation =
        Mock.Of<ISomeInterface>(si => si.GimmeSomeData() == list);

    List<int> resultList = implementation.GimmeSomeData();

    foreach (int i in resultList)
    {
        Console.WriteLine(i);
    }
}

public interface ISomeInterface
{
    List<int> GimmeSomeData();
}