2012-01-11 51 views
2

我想单元测试一个存储库中的返回void的Add方法。我有兴趣测试没有碰到数据库的元素的实际添加(而不是无论是否调用Add)。这是正确的方法吗?是。回调正确的方法来模拟使用Moq的void-returning方法?

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)); 
+0

它看起来像你想测试的东西被添加到一个内部列表..好的。如果你在这里使用mock,为什么不给你的班级一个虚假的数据库呢? – IanNorton 2012-01-11 17:42:22

+0

通过该代码,您只需检查Add方法是以非常复杂的方式调用的 – 2012-01-11 17:44:59

回答

3

不,你在这里测试的唯一东西是Moq本身。你可以尝试嘲笑底层,例如ISession如果你使用Nhibernate。

相关问题