Moq:如何验证接受在方法中创建的对象的函数

时间:2010-07-15 18:35:06

标签: c# unit-testing moq

我有以下方法;

public class MyClass
{
    public Repository UserRepository { get; set; }
    public void CreateUser(Message someMsg)
    {
       if (someMsg.CanCreate)
       {
           var obj = new object();
           UserRepository.Save(obj)
       }
    }
}

在我的测试用例中,我使用Moq来模拟ObjRepository,我想在“Save()”方法上调用verify。但是,save方法接受在被测方法中创建的对象,我无法模拟。

有没有使用Moq?我做错了吗?

3 个答案:

答案 0 :(得分:6)

您可以在模拟上进行以下设置:

objRepMock.Setup(or => or.Save(It.IsAny<object>()).Callback(obj => {
   // Do asserts on the object here
}

答案 1 :(得分:2)

marcind得到了滚动,但我想我会加入更多的代码。你的测试看起来像这样:

var objMock = new Mock<Repository>();
objMock.Setup(x=>x.Save(It.IsAny<object>)).Verifiable();
var myclass = new MyClass{Repository = objMock.object};
var mymessage = new Mock<Message>();
myclass.CreateUser(mymessage.object);
objMock.Verify(x=>x.Save(It.IsAny<object>), Times.AtLeastOnce);

答案 2 :(得分:1)

您可以使用依赖注入。

public Repository ObjRepository { get; set;}
public void doStuff()
{
   var obj = new object();
   doStuff(obj);
}
public void doStuff(Object obj)
{
   ObjRepository.Save(obj)
}