我想使用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));
我想设置保存时的Id不再是Guid.Empty。 保存是一个void方法,所以没有返回,并使用:
.Callback(() => my = new MyClassImpl(new Guid("..")))
无法正常工作..
答案 0 :(得分:2)
首先,您必须正确设置期望值。我认为你真正想要的是设置模拟,以便它接受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);
}