Callback是使用Moq模拟void返回方法的正确方法

本文关键字:方法 返回 void 模拟 Moq Callback | 更新日期: 2023-09-27 18:19:58

我想在返回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));

Callback是使用Moq模拟void返回方法的正确方法

不,这里唯一要测试的是Moq本身。如果您使用Nhibernate,您可以尝试模拟底层,例如ISession。