Попытка создать объект Moq - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть метод, который принимает IList<Person> и возвращает IEnumberable следующим образом:

 internal static IEnumerable<Dictionary<string, string>> GetPersonsPerSite(IList<Person> Data)
    { 
         //Implementation ...
    }

и я пытаюсь создать фиктивный объект IList<Person>, чтобы проверить этот метод.

Используя Moq, я написал следующее:

var mockObjects = new Mock<IList<Person>>();

mockObjects.Setup(x => x[0]).Returns(new Person()
                                                 {
                                                        SITE_ID = "test",
                                                        MPAN = "test",
                                                        ADDLINE1 = "test",
                                                        ADDLINE2 = "test",
                                                        ADDRESS_LINE_1 = "test",
                                                        ADDRESS_LINE_2 = "test"
                                                 });

Однако, когда я использую объект, IEnumerable возвращает исключение Object reference not set to an instance of an object.

Я новичок в Moq, и я почти уверен, что мне здесь не хватает фундаментальной концепции, однако я успешно могу генерировать исключения и модифицировать выходные данные с другими ложными объектами.

Буду признателен, если кто-нибудь укажет мне правильное направление.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Не издевайтесь над IList.Вам не нужно, если вы не хотите проверять что-то конкретное.

Вместо этого просто сделайте свой тест простым и сделайте что-то вроде этого:

var testData = new List<Person>(){new Person()
                                                 {
                                                        SITE_ID = "test",
                                                        MPAN = "test",
                                                        ADDLINE1 = "test",
                                                        ADDLINE2 = "test",
                                                        ADDRESS_LINE_1 = "test",
                                                        ADDRESS_LINE_2 = "test"
                                                 }};
var result = GetPersonsePerSite(testData);
3 голосов
/ 09 февраля 2012

Код, который вы получили, выглядит нормально и работает для меня. Можете ли вы привести пример, где вы на самом деле потребляете mockObjects.Object и считаете его нулевым?

Кроме того, вам действительно нужно издеваться над IList<Person>? Если вы просто используете его для предоставления тестовых данных в тестируемый метод, просто используйте конкретный список - ничего не получится, если использовать макет для этого.

Конечно, вы можете насмехаться над ним, чтобы убедиться, что с ним выполняются определенные действия (вызванные методы, доступ к свойствам и т. Д.) - в этом случае это не так.

...