【问题标题】:Moq modify protected on calling void methodMoq 在调用 void 方法时修改受保护
【发布时间】:2010-08-22 23:08:02
【问题描述】:

我想使用 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("..")))

不工作..

【问题讨论】:

    标签: moq protected void


    【解决方案1】:

    首先,您必须正确设置期望。我认为您真正想要的是设置模拟以便它接受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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2011-04-13
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多