Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Так я не понял, как вы все таки предлагаете решить проблему разводов?
И третье: возможно, за один тест нам понадобится несколько раз удалить какую-то таблицу или несколько и создать заново, при этом оставив другие таблицы нетронутыми.
var tableNameAnnotation = entityType.GetAnnotation("Relational:TableName");
var tableSchemaAnnotation = entityType.GetAnnotation("Relational:Schema");this.ObjectLinks.ToList().Where(...).SingleOrDefault()Когда ж, закончиться этот ужас с #if DEBUG.он уже закончился когда ввели имя окружения, но оно не работает тогда когда нет окружения — это в другом проекте есть окружение, в тестовом его нет и оно там не нужно.
Почему не рассматривается вариант с проектом интеграционных тестов в Core?это не совсем понял — у меня же всё в core 3.1? или вы что-то другое имеете в виду?
services.AddDbContext<ваш_контекст>(options => options.UseSqlServer(Configuration.GetConnectionString(ConnStr)));db.Phones.Add(new Phone { ... }); может работать не так, как написан? Или вы выполняете роль DBA и тестируете миграции?То есть, вы почему-то думаете, что код типа db.Phones.Add(new Phone {… }); может работать не так, как написан?
инжектирование придётся настраивать в самих тестах, а по сути это будет имитация инжектирования ради самого процесса — контекст то один, и конфигурируется он в самом тесте
базу данных не целесообразно тестировать в юнит-форме, потму что подготовка данных — это одна функция, а использование их — другая
var repositoryMock = new Mock<IRepository>();
repositoryMock
.Setup(e => e.GetSomeEntity(...))
.Returns(someEntity);я строю тесты последовательно, и сразу вижу какой упал — если он упалА потом нужно модифицировать логику, и вы полдня будете искать, между какими тестами нужно вставить новый тест. Так нельзя.
прямая зависимость теста от состояния — это преимущество, а не недостаток.Это недостаток, а не преймущество. Окружение теста должно настраиваться в самом тесте, а не «где-то там». Только так видна полная картина теста и что именно он тестирует.
как вы добавите права несуществующему пользователю?Это бизнес-логика, и ей не место в DAL
как осуществить продажу, если нет контрагента?Это бизнес-логика, и ей не место в DAL
вызываем функции по очереди и становится понятна иерархия вызововИ это тоже бизнес-логика, которой не место в DAL.
смотреть что будет если пользователь введёт те или иные данныевалидация данных — это вообще Presentation Layer, а проверка бизнес-требований — это задача для слоя бизнес-логики
тест на консистентность базы данныхВас вообще это не должно волновать. В случае RDB и правильной схемы консистентность вам гарантируется. А если приложение падает из-за того, что в какой то момент не был найден контрагент — то это явный баг в бизнес-логике. Тесты консистентности БД тут не помогут.
я так понял по отзывам что это очень индивидуальный момент, какие технологии тестирования подходят для какой ситуации. если база сложная — один подход, если часто меняется — другой, это зависит ещё и от того стиля в котором вы пишете.
вот TimurNes в своей статье про DDD вобще другой стиль работы использует, хотя там тоже можно использовать то что я предлагаю. не вижу противоречия. попробую завтра написать пример, может я как-то не так выразился...
Мы из другого теста — тестируем базу данных на MSTest