【问题标题】:Moq and the parameters you pass起订量和您传递的参数
【发布时间】:2011-02-27 22:36:20
【问题描述】:

我创建了一个 MOQ 对象

传给我的班级

调用它并传入一个对象。

如何访问该对象以查看是否设置了正确的属性?

【问题讨论】:

  • 您是将实际模拟传递给您的班级还是 mock.object?
  • 这就是我想要做的:MyMock.MyMethod(MyObjectINeed);如何获得 MyObjectINeed?
  • 为什么不保留对它的引用? var myObj = myObjectINeed; MyMock.MyMethod(myObj); Assert.That(myObj) != null。

标签: c# .net unit-testing moq


【解决方案1】:

为此,您在模拟对象上使用.VerifySet() 方法。比如

mockObject.VerifySet(o => o.Name = "NameSetInMyClass");

如果设置不正确,会引发异常。

quick start here 中了解更多信息。

【讨论】:

    【解决方案2】:

    您的问题有点令人困惑,不清楚您在最后一句中指的是什么对象。

    但是,每个 Moq 包装器都有一个“对象”属性,该属性是您要模拟的类型。您只需查看该属性即可访问它。

    var myMock = new Mock<MyObj>();
    
    var myProp = myMock.Object.MyProperty;
    

    【讨论】:

      【解决方案3】:

      如果我没看错你的问题,你似乎有这样的情况?

      public void DoTheCalculation(ICalculator calculator) {
         calculator.Calculate(this /* Or any other object */);
      }
      

      在这种情况下,您可以使用接受谓词的 It.Is 方法对传递给 Mocked 接口的参数进行断言:

      [TestMethod]
      public void DoTheCalculation_DoesWhateverItShouldDo() {
           Mock<ICalculator> calcMock = new Mock<ICalculator>();
           CalculationParameters params = new CalculationParmeters(1, 2);
           params.DoTheCalculation(calcMock.Object);
      
           calcMock.Verify(c => c.Calculate(It.Is<CalculationParameters>(
                               c => c.LeftHandSide == 1 
                                    && c.RightHandSide == 2));
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 2015-03-14
        • 1970-01-01
        相关资源
        最近更新 更多