Как сравнить два списка объектов, используя moq с mspec (стиль BDD) - PullRequest
2 голосов
/ 22 января 2010

Я только начал изучать BDD для моего текущего проекта. Я использую moq с mspec, чтобы получить хорошие результаты теста. Однако я не могу найти достаточно примеров того, что я пытаюсь сделать, возможно, я использую неправильный подход или просто недостаточно понимаю синтаксис, пожалуйста, сообщите.

Проблема в том, что я пытаюсь проверить, установлено ли свойство в классе. Это свойство представляет собой список объектов, и я хочу убедиться, что каждый объект имеет те же значения, что и ожидаемый объект.

Итак, с учетом начальных предпосылок

public class Data
{
    int a;      
}

public class DataViewer : IDataViewer
{
    public List<Data> dataList {get;set;}
}

public interface IDataViewer
{
    public List<Data> dataList {get;set;}
}

Я использую mspec и moq для выполнения следующих действий

class when_refreshing_data_list : Context
{
    Because .... = () =>
    {
        ....  // process the datalist
    }

    ThenIt should_set_the_data_list = () =>
    {
        List<DataList> expectedDataList = new List<DataList>();
        expectedDataList.add() // add some expected values to the datalist
        ...

        // problem is here in comparing two List<DataList>
        _mockDataViewer.VerifySet(f => f.dataList = expectedDataList)
    }
}

public abstract class Context
{
    Establish context = () =>
    {
         _mockDataViewer = new Mock<IDataViewer>();
    }
}

Как бы я провел это сравнение? Могу ли я использовать переопределение оператора? Если да, то как? Я попытался поместить тело выражения с правой стороны лямбды, но мне сказали, что «лямбда-выражение с телом оператора нельзя преобразовать в дерево выражений».

Любая помощь приветствуется:)

1 Ответ

1 голос
/ 22 января 2010

Перегрузили ли вы метод equals для объекта Data?

public override bool Equals(object obj)
{
    if (((Data)obj).a.Equals(this.a))
        return true;

    return false;
}

Это должно вызываться автоматически при сравнении dataList с ожидаемым DataList.

...