Охват модульного тестирования MVC BaseController - PullRequest
0 голосов
/ 19 декабря 2018

Это вопрос лучшей практики.Все мои контроллеры делают то же самое, с той лишь разницей, что репозитории и запросы являются специфичными для каждого, поэтому все действия CRUD находятся в BaseController с переопределениями для конкретных контроллеров по мере необходимости.

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

Редактировать:

Вот пример, чтобы прояснить, что происходит, и я в порядке с любой лучшей практикой, я просто проверяю, нашел ли я правильный баланс между тщательным тестированием и проверкой себя на смерть.В приведенном ниже примере показано только одно короткое действие, чтобы сохранить пример небольшим, но BaseController также обрабатывает Create, CreatePost, Edit, EditPost и Delete.

public abstract class BaseController<TEntity> : Controller where TEntity : class
{
    public BaseController()
    { }

    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        TEntity entity = await DetailsQueryAsync(id);

        if (entity == null)
        {
            return NotFound();
        }

        return View(entity)
    }

    protected virtual Task<TEntity> DetailsQueryAsync(int? id)
    {
        throw new NotImplementedException();
    }
}

public class StudentsController : BaseController<Student>
{
    private readonly IRepository<Student> studentRepository;

    public StudentsController(UnitOfWork<SchoolContext> unitOfWork)
        : base()
    {
        studentRepository = unitOfWork.StudentRepository;
    }

    protected override async Task<Student> DetailsQueryAsync(int? id)
    {
        return await studentRepository.Get(id.Value)
                         .AsNoTracking()
                         .SingleOrDefaultAsync();
    }
}

1 Ответ

0 голосов
/ 19 декабря 2018

Чтобы прямо ответить на ваш вопрос - нет, я не думаю, что тестирование одного производного класса базового класса представляет собой покрытие кода.

Но если код в ваших контроллерах просто делает вызовы доступа к данным, я нене думаю, что стоит потратить на них юнит-тестирование.

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