0
我有以下屬性爲什麼此ActionFilterAttribute不會將數據導入ViewModel?
public class ImportStatusAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var model = (IHasStatus)filterContext.Controller.ViewData.Model;
model.Status = (StatusMessageViewModel)filterContext.Controller.TempData["status"];
filterContext.Controller.ViewData.Model = model;
}
}
我與以下試驗方法測試(第幾當這一個經過我會寫...)
[TestMethod]
public void OnActionExecuted_ImportsStatusFromTempDataToModel()
{
// Arrange
Expect(new
{
Status = new StatusMessageViewModel() { Subject = "The test", Predicate = "has been tested" },
Key = "status"
});
var filterContext = new Mock<ActionExecutedContext>();
var model = new Mock<IHasStatus>();
var tempData = new TempDataDictionary();
var viewData = new ViewDataDictionary(model.Object);
var controller = new FakeController() { ViewData = viewData, TempData = tempData };
tempData.Add(expected.Key, expected.Status);
filterContext.Setup(c => c.Controller).Returns(controller);
var attribute = new ImportStatusAttribute();
// Act
attribute.OnActionExecuted(filterContext.Object);
// Assert
Assert.IsNotNull(model.Object.Status, "The status was not exported");
Assert.AreEqual(model.Object.Status.ToString(), ((StatusMessageViewModel)expected.Status).ToString(), "The status was not the expected");
}
(Expect()
是一個是保存在expected
對象的一些期望方法...)
當我運行測試,它失敗的第一個斷言,我不能醃肉讓我的頭nd爲什麼。調試,我可以看到model
正確填充,並且(StatusMessageViewModel)filterContext.Controller.TempData["status"]
具有正確的數據。但在
model.Status =(StatusMessageViewModel)filterContext.Controller.TempData [「status」];
model.Status
在我的觀察窗口中仍然爲空。爲什麼我不能這樣做?
我注意到你正在使用一個模擬IHasStatus對象。你是否可能不得不向你的模擬框架發出信號,表示你希望它將.Object/.Status屬性作爲普通的get/set屬性而不是默認行爲可能是什麼? – Levi 2010-04-16 16:53:19
這可能是它 - 當我創建了一個實現此接口的虛假代碼時,它按預期工作。 – 2010-04-16 17:52:01
另外,它可以通過調用'model.SetupProperty(c => c.Status)'來修復。 – 2010-04-16 17:55:32