Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 回调是使用Moq模拟void返回方法的正确方法吗?_C#_Unit Testing_Moq - Fatal编程技术网

C# 回调是使用Moq模拟void返回方法的正确方法吗?

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) =>

我想在返回void的存储库中对Add方法进行单元测试。我感兴趣的是在不影响数据库的情况下测试元素的实际添加(而不是是否调用了Add)。这是正确的方法吗

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方法是以非常复杂的方式调用的