此时我已经迷失在树林中,我不断地进行相同的更改,并认为智能感知只是向我隐藏了一些东西。
我正在尝试创建一个模拟存储库来测试添加(和查询)单一类型和列表。单个存储库的工作原理如下:
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 正在 mock 我。
此时我所拥有的是:
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);
}
我在这里缺少什么?我以前从未 mock 过这样的存储库,所以我可能违反了一些基本原则,如果是这样,请告诉我。
谢谢。
最佳答案
我认为问题出在这一行
.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));
关于c# - 模拟存储库返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330654/