简体   繁体   English

模拟存储库返回列表

[英]Mocking a Repository returning a list

I'm beyond lost in the woods at this point, I keep making the same changes over and over with the thought that intellisense is just hiding something from me. 在这一点上,我并没有迷失在森林中,我不断地做出相同的改变,以为智能感知只是对我隐藏了一些东西。

I'm trying to create a mocked repo to test adding (and querying) single types and lists. 我正在尝试创建一个模拟回购,以测试添加(和查询)单个类型和列表。 the single repo is working as: 单个回购协议的工作方式如下:

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;
    }

However, my attempts to do something similar for a list are just not working. 但是,我尝试对列表执行类似操作的尝试没有效果。 Specifically the Returns in the Setup is laughing at me. 具体来说,安装程序中的退货正在嘲笑我。

What I have at this point is: 我现在所拥有的是:

 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;

    }

Ultimately I'd like to do something with an add test like: 最终,我想做一个添加测试,例如:

[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);
    }

What am I missing here? 我在这里想念什么? I have never mocked a repo like this before, so I've probably violated some basic tenets, and if so please let me know. 我以前从来没有嘲笑过这样的仓库,所以我可能违反了一些基本原则,如果是,请告诉我。

Thanks. 谢谢。

I think the issue is with this line 我认为问题在于这条线

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

When you use Select it returns an IEnumerable<DNS_ENTITY> but you are casting it to DNS_ENTITY which will result in null 当您使用Select它返回IEnumerable<DNS_ENTITY>但您将其强制转换为DNS_ENTITY ,这将导致null

try... 尝试...

.Callback((List<DNS_Entity> le) => _dns.AddRange(le));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM