C# 修改已设置的模拟属性
我将简化一点问题: 在我的测试中,我使用一个模拟对象(我模拟它是因为它调用了bdd),我将参数提供给另一个对象(非模拟)的方法,该对象的目的是修改这个模拟对象的属性C# 修改已设置的模拟属性,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我将简化一点问题: 在我的测试中,我使用一个模拟对象(我模拟它是因为它调用了bdd),我将参数提供给另一个对象(非模拟)的方法,该对象的目的是修改这个模拟对象的属性 ModifyingClass myModifyingClass = new ModifyingClass(); Mock<ToModifyClass> mockedClass = new Mock<ToModifyClass>(); mockedClass.Setup(mc => mc.name).Re
ModifyingClass myModifyingClass = new ModifyingClass();
Mock<ToModifyClass> mockedClass = new Mock<ToModifyClass>();
mockedClass.Setup(mc => mc.name).Returns("Test1");
myModifyingClass.modify(mockedClass.Object);
ModifyingClass myModifyingClass=新建ModifyingClass();
Mock mockedClass=新建Mock();
Setup(mc=>mc.name).Returns(“Test1”);
修改(mockedClass.Object);
方法
modify
然后尝试设置模拟对象的属性名称,但它不起作用,因此可能这是正常行为,但我确实需要测试所有这些是否都起作用,以及方法modify
是否按照我的要求设置属性。在Moq中,需要设置getter
mockedClass.SetupGet(mc => mc.name).Returns("Test1");
如注释中所述,为了保留传递给属性的值,您需要以不同的方式设置模拟类 参考文献 存根模拟上的所有属性(Silverlight上不可用): 提供的示例测试看起来像
//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
//排列
var myModifyingClass=新的ModifyingClass();
var mockedClass=new Mock();
mockedClass.SetupAllProperties()//运行测试时会发生什么?错误发生在哪里?这是什么模拟库?不管怎样,如果您想像使用不动产一样使用该属性,就不应该对其进行模拟-具体操作方式取决于library.Janis。我调试了测试,没有发生错误,只是没有修改属性。你怎么知道它没有被修改,你有一个断言语句吗?请看这里:,你需要调用SetupAllProperties(),它也不会工作,我想我得到了“Test1”,即使我因为setup/setupget设置了属性。我最终不会使用安装程序,而是自己设置属性,因为它可以工作,非常感谢您的帮助
//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