Модификация Moq защищена при вызове метода void - PullRequest
2 голосов
/ 23 августа 2010

Я хочу использовать метод moq void и присваивать значение защищенному свойству при вызове.

public class MyClass{ public Guid Id {get; protected set; } }

public interface IMyRespository { public void Save(MyClass myClass); }

Что-то вроде:

var moq = new Mock<IMyRespository>();
var my = new MyClass();
moq.Setup(x=>x.Save(my));

Я хочу настроить этот идентификаторпри сохранении больше не Guid.Empty.Сохранение является пустым методом, поэтому не возвращает, и использование:

.Callback(() => my = new MyClassImpl(new Guid("..")))

не работает ..

1 Ответ

2 голосов
/ 23 августа 2010

Во-первых, вы должны правильно настроить ожидание. Я думаю, что вы на самом деле хотите настроить макет так, чтобы он принимал любой экземпляр MyClass:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()));

Затем вы настраиваете обратный вызов следующим образом:

moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
   .Callback((myClassParam) => my = myClassParam);

Объединение всего этого позволит вам создать макет, который принимает MyClass и сохраняет экземпляр MyClass в my переменную:

[TestMethod]
public void Test() {
  var moq = new Mock<IMyRespository>();
  MyClass my = null;
  moq.Setup(x=>x.Save(It.IsAny<MyClass>()))
     .Callback((myClassParam) => my = myClassParam);
  var newMyClass = new MyClassImpl(new Guid(".."));
  moq.Object.Save(newMyClass);
  Assert.AreSame(newMyClass, my);
}
...