修改已设置的mock属性

时间:2017-06-22 09:20:12

标签: c# unit-testing mocking moq

我要简化一下问题:

在我的测试中,我使用了一个模拟对象(我嘲笑它,因为它调用了一个bdd),我将参数提供给另一个对象(不是模拟的)的方法,其目的是修改这个模拟对象的属性。 / p>

ModifyingClass myModifyingClass = new ModifyingClass();
Mock<ToModifyClass> mockedClass = new Mock<ToModifyClass>();
mockedClass.Setup(mc => mc.name).Returns("Test1");
myModifyingClass.modify(mockedClass.Object);

方法modify然后尝试设置模拟对象的属性名称,但它不起作用,所以也许这是正常的行为,但我真的需要测试是否所有这些工作以及方法是否modify根据需要设置属性。

2 个答案:

答案 0 :(得分:0)

在Moq中,需要设置吸气剂。

mockedClass.SetupGet(mc => mc.name).Returns("Test1");

答案 1 :(得分:0)

如评论中所述,您需要以不同方式设置模拟类,以保留传递给属性的值。

参考Moq - Quickstart

  

在模拟上存储所有属性(在Silverlight上不可用):

mock.SetupAllProperties();

提供的示例测试看起来像......

//Arrange
var myModifyingClass = new ModifyingClass();
var mockedClass = new Mock<ToModifyClass>();
mockedClass.SetupAllProperties(); //<-- this will allow property changes to be retained.
var model = mockedClass.Object;
//set the property now that it can be set
model.name = "Test1";
var expected = "expected value here";

//Act
myModifyingClass.modify(model);

//Assert
var actual = model.name;
Assert.AreEqual(expected, actual);
//... other assertions