Moq: как проверить функцию, которая принимает объект, созданный в методе - PullRequest
2 голосов
/ 15 июля 2010

У меня есть следующий метод;

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 ()». Однако метод save получает объект, созданный в тестируемом методе, который я не могу смутить.

Есть ли что-нибудь подобное с помощью Moq? Я делаю это неправильно?

Ответы [ 3 ]

6 голосов
/ 15 июля 2010

У вас на макете могут быть следующие настройки:

objRepMock.Setup(or => or.Save(It.IsAny<object>()).Callback(obj => {
   // Do asserts on the object here
}
2 голосов
/ 15 июля 2010

Марсинд получил мяч, но я думал, что добавлю больше кода. Ваш тест будет выглядеть так:

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);
1 голос
/ 15 июля 2010

Вы можете использовать внедрение зависимостей.

public Repository ObjRepository { get; set;}
public void doStuff()
{
   var obj = new object();
   doStuff(obj);
}
public void doStuff(Object obj)
{
   ObjRepository.Save(obj)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...