Насмешка над хранилищем, возвращая список - PullRequest
2 голосов
/ 30 ноября 2011

В этот момент я больше не нахожусь в лесу, я продолжаю вносить одни и те же изменения снова и снова с мыслью, что intellisense просто что-то скрывает от меня.

Я пытаюсь создать насмешливыйрепо для тестирования добавления (и запроса) отдельных типов и списков.один репо работает как:

public Mock<IBaseRepository<DNS_Entity>> RepositoryFakeObject()
    {
        var _dns = new List<DNS_Entity>();
        var mock = new Mock<IBaseRepository<DNS_Entity>>();

        mock.Setup(x => x.Add(It.IsAny<DNS_Entity>()))
            .Callback((DNS_Entity e) => _dns.Add(e));

        mock.Setup(x => x.SelectALL()).Returns(_dns.AsQueryable());
        return mock;
    }

Однако мои попытки сделать что-то подобное для списка просто не работают.В частности, Returns in the Setup смеется надо мной.

На данный момент у меня есть следующее:

 public Mock<IBaseRepository<List<DNS_Entity>>> RepositoryFakeList() // Mock<IBaseRepository<List<DNS_Entity>>>
    {
        var _dns = new List<DNS_Entity>();
        var mock = new Mock<IBaseRepository<List<DNS_Entity>>>();

        mock.Setup(x => x.Add(It.IsAny<List<DNS_Entity>>()))
            .Callback((List<DNS_Entity> le) => _dns.Add(le.Select(e => e) as DNS_Entity));

       // mock.Setup(x => x.SelectALL()).Returns((IQueryable<List<DNS_Entity>>) (_dns));

        mock.Setup(x => x.SelectALL()).Returns(_dns.AsQueryable());
        return mock;

    }

В конечном счете, я хотел бы сделать что-то с тестом добавления, например:

[Test]
    public void AddNewList()
    {
        var mock = RepositoryFakeList();

        var lst = new List<DNS_Entity>
                      {
                          new DNS_Entity {FirstName = "added", LastName = "From Test"},
                          new DNS_Entity {FirstName = "added2", LastName = "From Test2"}
                      };

        mock.Object.Add(lst);

        Assert.IsTrue(mock.Object.SelectALL().Count() == 2);
    }

Что мне здесь не хватает?Я никогда не издевался над репо, как это раньше, поэтому я, вероятно, нарушил некоторые основные принципы, и если да, пожалуйста, дайте мне знать.

Спасибо.

1 Ответ

4 голосов
/ 30 ноября 2011

Я думаю, что проблема с этой строкой

.Callback((List<DNS_Entity> le) => _dns.Add(le.Select(e => e) as DNS_Entity));

Когда вы используете Select, он возвращает IEnumerable<DNS_ENTITY>, но вы приводите его к DNS_ENTITY, что приводит к null

попробовать ...

.Callback((List<DNS_Entity> le) => _dns.AddRange(le));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...