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作为一个依赖项。您显然简化了发布代码。这可能有助于我们查看真实代码。