Почему этот ActionFilterAttribute не импортирует данные в ViewModel? - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть следующий атрибут

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 ...)

Когда я запускаю тест, он терпит неудачу при первом утверждении , и я не могу понять, почему. Отладка, я вижу, что model заполнен правильно, и что (StatusMessageViewModel)filterContext.Controller.TempData["status"] имеет правильные данные. Но после

model.Status = (StatusMessageViewModel) filterContext.Controller.TempData ["status"];

model.Status все еще нулевой в моем окне просмотра. Почему я не могу это сделать?

1 Ответ

0 голосов
/ 01 мая 2010

Проблема заключалась в том, что Moq неправильно обрабатывал свойство Status. Звонок на

model.SetupProperty(c => c.Status);

исправил проблему.

...