简体   繁体   English

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

[英]Moq: how to verify a function that takes in a object created within a method

I have the following method; 我有以下方法;

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

In my test case, I used Moq to mock out the ObjRepository and I wanted to to call verify on the "Save()" method. 在我的测试用例中,我使用Moq来模拟ObjRepository,我想在“Save()”方法上调用verify。 However, the save method takes in a object that is created within the method under test, which I cannot mock. 但是,save方法接受在被测方法中创建的对象,我无法模拟。

Is there anyway around this using Moq? 不管怎么说,使用Moq? I am doing this wrong? 我做错了吗?

You can have the following setup on your mock: 您可以在模拟上进行以下设置:

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

marcind got the ball rolling but I thought I'd put more code in. Your test would look like this: 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);

You could use dependency injection. 您可以使用依赖注入。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM