首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Moq:如何验证接受在方法中创建的对象的函数

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

Stack Overflow用户
提问于 2010-07-16 02:35:06
回答 3查看 1.5K关注 0票数 2

我有以下方法:

代码语言:javascript
运行
复制
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来解决这个问题呢?我做错了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-16 02:49:28

您可以在您的mock上进行以下设置:

代码语言:javascript
运行
复制
objRepMock.Setup(or => or.Save(It.IsAny<object>()).Callback(obj => {
   // Do asserts on the object here
}
票数 6
EN

Stack Overflow用户

发布于 2010-07-16 03:16:18

marcind开始行动了,但我想我应该放进更多的代码。您的测试将如下所示:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2010-07-16 02:45:14

你可以使用依赖注入。

代码语言:javascript
运行
复制
public Repository ObjRepository { get; set;}
public void doStuff()
{
   var obj = new object();
   doStuff(obj);
}
public void doStuff(Object obj)
{
   ObjRepository.Save(obj)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3258712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档