我是新来的起订量的框架。我使用的MOQ框架编写单元测试控制器,这里是我的测试方法,使用Moq:模拟对象自动更新?
var mockedItemDetail = new ItemDetail()
{
Name = null
};
var mockObject = new Mock<IItem>();
mockObject.Setup(x => x.GetItemDetail()).Returns(mockedItemDetail);
var result = myController.GetDetails() as ViewResult;
这里是我的控制器的方法,
public ActionResult GetDetails()
{
var controllerItemDetail = new ItemDetail();
controllerItemDetail = _item.GetItemDetail();
controllerItemDetail.Name = "Changed Name";
return View("ViewName", controllerItemDetail);
}
试运行,现在我想断言发送mockedItemDetail并获得模型结果controllerItemDetail。
在上述情况下,mockedItemDetail属性“名称”具有零和接收controllerItemDetail属性名称为“更名”。
但每当我调试,调用测试方法GetDetails(),
- 我mockedItemDetail属性名称也被更新为当前范围“更名”,我不知道为什么之后?这是MoQ的实际行为吗?
编辑的内容
考虑下模拟列表相同上述情况下,这里的模拟对象的变化不会在所有情况更新。即,对于mockedItemDetailList列表计数保持0和甚至之后的测试方法调用controllerItemDetail列表计数为1。为什么?
测试方法:
var mockedItemDetailList = new List<ItemDetail>();
var mockObject = new Mock<IItem>();
mockObject.Setup(x => x.GetListOfItemDetail()).Returns(mockedItemDetailList);
var result = myController.GetDetails() as ViewResult;
控制器的方法:
public ActionResult GetDetails()
{
var controllerItemDetail = new ItemDetail();
controllerItemDetail = _item.GetListOfItemDetail();
controllerItemDetail.Add(new ItemDetail(){
Name = "Changed Name"
});
return View("ViewName", controllerItemDetail);
}
你返回一个特定的对象'x.GetItemDetail('。为什么它不会在当前的情况下更新?该对象正在'controllerItemDetail.Name =“更改名称”;'修改。这是预期的行为。 – FrankerZ
Mockling是一种罪过 – MickyD
请找编辑的内容@FrankerZ – Praveen