views:

49

answers:

3

Hi all:

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. However, the save method takes in a object that is created within the method under test, which I cannot mock.

Is there anyway around this using Moq? I am doing this wrong?

+1  A: 

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)
}
Josh
+3  A: 

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
+1  A: 

marcind got the ball rolling but I thought I'd put more code in. Your test would look like this:

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);
Reza