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

C# Moq:如何验证接收在方法中创建的对象的函数,c#,unit-testing,moq,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) }

我有以下方法

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方法接收在测试方法中创建的对象,我无法模拟该对象


使用最小起订量是否存在任何问题?我做错了吗?

您可以使用依赖注入

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

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

objRepMock.Setup(or => or.Save(It.IsAny<object>()).Callback(obj => {
   // Do asserts on the object here
}
objRepMock.Setup(or=>or.Save(It.IsAny()).Callback(obj=>{
//在此处对对象进行断言
}

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);
var objMock=new Mock();
Setup(x=>x.Save(It.IsAny)).Verifiable();
var myclass=newmyclass{Repository=objMock.object};
var mymessage=new Mock();
myclass.CreateUser(mymessage.object);
验证(x=>x.Save(It.IsAny),Times.atleastone);

是的,很可能您做错了。DoStuff方法可能会将obj作为一个依赖项。您显然简化了发布代码。这可能有助于我们查看真实代码。