2

我想使用 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。Save 是一个 void 方法,因此没有返回,并使用:

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

不管用..

4

1 回答 1

2

首先,您必须正确设置期望。我认为您真正想要的是设置模拟,以便它接受以下任何实例MyClass

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

然后,您像这样设置回调:

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

将它们放在一起将让您构造一个接受实例MyClass并将其保存到变量的模拟:MyClassmy

[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);
}
于 2010-08-22T23:20:03.170 回答