Доброго времени суток!
У меня есть такой вопрос: у меня есть веб-прриложение asp.net mvc которое работает с базой данных через Entity Framework.
Для работы с Entity я создал класс-провайдер выполняющий стандартные CRUD операции. Хотелось бы все это дело покрыть юнит тестами как у крутых мужиков. Но слышал что юнит тесты не должны работать с базой данных. И это вроде как логично - допустим я хочу потестировать операции вставки, обновления и удаления у своего репозитория но будет странно если тестовый код будет осуществлять эти операции с реальной базой (пусть даже и тестовой).
Пример теста с использованием Moq найденный на просторах интернета
// интерфейс репозитория
interface IRepository : IDisposable
{
List
// тестовый метод
[TestMethod]
public void IndexViewBagMessage()
{
var mock = new Mock
Но тогда возникает вопрос - а какой у этого всего смысл? Ведь в моке мы подставляем фейковые данные. То есть я вроде кк хочу протестировать работу моего репозитория а вместо этого методы самого репозитория не используются, а вместо них используются подставные данные из мока.
Отсюда вопрос: как все же правильно будет тестировать репозиторий и в чем смысл найденного мной примера?
Ответ
Смысл вашего примера — тестирование работы куска кода, который работает с репозиторием. Для него репозиторий подменяется на фейк.
Для тестирования самого репозитория вам нужно фейкнуть то, с чем он работает — то есть, базу данных. Тестируйте настоящий репозиторий на тестовой базе данных, ничего плохого в этом не вижу.
В любом случае, для «вертикальной» структуры приложения, если вы тестируете уровень X, вы в тестах подставляете фейковые нижележащие структуры данных/объекты (которые эмулируют уровень X + 1), а вышележащие объекты (то есть, те, которые работают с вашим уровнем X), заменяются на код теста.
Комментариев нет:
Отправить комментарий