Модульное тестирование модели изменений в Asp.net MVC 3 - PullRequest
3 голосов
/ 23 января 2011

У меня есть класс ProductController и модель Product. Каждый раз, когда вызывается действие Create в ProductController, оно создает новое Product на основе FormCollection, а затем вызывает внутри Product функцию для изменения даты:

[HttpPost]
public ActionResult Create(FormCollection form)
{
    Product product = new Product();
    TryUpdateModel(product, form);

    if(ModelState.IsValid)
    {
        product.ChangeDate(form["date"]);
        repository.SaveProduct(product);

        return RedirectToAction("Index");
    }
    else
        return View();
}

Мне было интересно, как я могу проверить Product, поэтому я знаю, что .ChangeDate вызывается (через Moq's Verify). Я не использовал автоматическую привязку модели Asp.Net, потому что хочу перехватить любое исключение привязки через TryUpdateModel. Я не уверен, должен ли я поместить .ChangeDate в класс Controller или Repository. Я использую Moq, MVC3 и Entity Framework 4. Любая помощь приветствуется!

Спасибо, Alex

1 Ответ

3 голосов
/ 23 января 2011

Вы можете настроить ожидание в методе SaveProduct смоделированного хранилища, чтобы оно вызывалось с определенным аргументом. Этот конкретный аргумент будет продуктом, который создается внутри действия контроллера. Затем вы можете утверждать, что свойство Date этого объекта совпадает со свойством, которое вы передали в качестве аргумента в действии Create в коллекции форм.

var mock = new Mock<IRepository>();
mock.Setup(
    x => x.SaveProduct(
        It.Is<Product>(p => p.Date == someExpectedDate)
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...