Как проверить действия MVC с Code First? - PullRequest
1 голос
/ 01 июля 2011

Я пытаюсь протестировать действия MVC, поэтому я создал IRepository и MockRepository

public class Repository : DbContext, IRepository
{
    public IDbSet<TEntity> SomeEntities { get; set; }
}

public interface IRepository : IDisposable
{
    IDbSet<TEntity> SomeEntities { get; set; }

    int SaveChanges();
}

С Create и Delete действиями это было просто, но застряло с Edit действием:

    private IRepository repository;

    public ActionResult Edit(TEntity entity)
    {
        if (ModelState.IsValid)
        {
            repository.Entry(entity).State = EntityState.Modified;
            repository.SaveChanges();

            return RedirectToAction("Index");
        }

        return View(entity);
    }

Итак, я вижу два способа решения этой проблемы:

  1. должен ли я добавить в IRepository новый метод

    DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
    

    Как я могу это сделать?DbContext.Entry метод возвращает очень специфический DbEntityEntry<TEntity> тип?

  2. или изменить способ обновления сущности?Какой рекомендуемый способ сделать это?

1 Ответ

1 голос
/ 10 ноября 2011

Я бы обычно абстрагировал функциональность EF больше, чем вы, то есть мои действия выглядят следующим образом:

private IRepository repository;
public ActionResult Edit(TEntity entity)
{
    if (ModelState.IsValid)
    {
        repository.Update(entity);
        repository.SaveChanges();

        return RedirectToAction("Index");
    }

    return View(entity);
}

тогда вы можете легко создать фиктивный репозиторий и проверить, что нужные функции вызываются.

Примечание. Обычно я также отделяю свои сущности от своих моделей и управляю своей единицей работы с помощью фильтра действий, но это не имеет никакого отношения к этому сообщению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...