[英]Using Moq : Mock object update automatically?
我是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屬性“Name”具有null並且接收到controllerItemDetail屬性Name作為“Changed Name”。
但每當我調試,調用測試方法GetDetails()后,
編輯內容
在下面的模擬列表中考慮相同的上述情況,這里模擬對象中的更改不會在所有上下文中更新。 即,在測試方法調用之后,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);
}
你有一個非常具體的對象:
var mockedItemDetail = new ItemDetail()
{
Name = null
};
當你調用mockObject.Setup(x => x.GetItemDetail()).Returns(mockedItemDetail);
,您將返回對mockItemDetail
的引用。 對該對象的任何更改都將在所有上下文中更新。
快速跟進。 要讓它每次都返回一個空白的new ItemDetail()
,你可以簡單地使用Returns()
的lambda方法:
mockObject.Setup(x => x.GetItemDetail()).Returns(() => new ItemDetail()
{
Name = null
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.