Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改已设置的模拟属性_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

C# 修改已设置的模拟属性

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

我将简化一点问题:

在我的测试中,我使用一个模拟对象(我模拟它是因为它调用了bdd),我将参数提供给另一个对象(非模拟)的方法,该对象的目的是修改这个模拟对象的属性

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