Это вопрос лучшей практики.Все мои контроллеры делают то же самое, с той лишь разницей, что репозитории и запросы являются специфичными для каждого, поэтому все действия 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();
}
}