C# 回调是使用Moq模拟void返回方法的正确方法吗?
我想在返回void的存储库中对Add方法进行单元测试。我感兴趣的是在不影响数据库的情况下测试元素的实际添加(而不是是否调用了Add)。这是正确的方法吗C# 回调是使用Moq模拟void返回方法的正确方法吗?,c#,unit-testing,moq,C#,Unit Testing,Moq,我想在返回void的存储库中对Add方法进行单元测试。我感兴趣的是在不影响数据库的情况下测试元素的实际添加(而不是是否调用了Add)。这是正确的方法吗 var list = new List<Foo>(); var repo = new Mock<IFooRepository>(); repo.Setup(x => x.Add(It.IsAny<Foo>())) .Callback((Foo f) =>
var list = new List<Foo>();
var repo = new Mock<IFooRepository>();
repo.Setup(x => x.Add(It.IsAny<Foo>()))
.Callback((Foo f) =>
{
list.Add(f);
});
repo.Object.Add(new Foo { FooId = 1 });
Assert.IsTrue(list.Any(x => x.FooId == 1));
var list=newlist();
var repo=new Mock();
repo.Setup(x=>x.Add(It.IsAny()))
.Callback((Foo f)=>
{
增加(f);
});
Add(newfoo{FooId=1});
Assert.IsTrue(list.Any(x=>x.FooId==1));
不,这里唯一要测试的是Moq本身。如果您使用的是Nhibernate,您可以尝试模拟底层,例如ISession。看起来您想测试是否有内容添加到内部列表中。。好啊如果您在这里使用mock,为什么不给您的类一个假的数据库呢?使用这些代码,您只需检查Add方法是以非常复杂的方式调用的