Подготовка данных для модульного теста — C#

Я пишу модульный тест/компонентный тест, используя Entity Framework Core InMemory Provider.

Когда я пишу модульный тест, я столкнулся со следующим вопросом.

У меня есть следующие два метода BL/DL.

  1. ToCreate
  2. ToGet

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

Когда я пишу модульный тест для метода ToGet, могу ли я использовать ToCreate (метод BL) для создания образцов данных или Когда я пишу модульный тест для ToCreate, могу ли я использовать метод ToGet для проверки созданных данных? Это правильный выбор?

Упомянул следующее для создания модульного теста: https://thewikihow.com/video_ddrR440JtiA

Когда я пишу модульный тест для метода ToGet, могу ли я использовать ToCreate, задайте себе вопрос: что, если ToCreate не удастся (имеет ошибку), что произойдет с вашим модульным тестированием ToGet?
CodingYoshi 19.02.2019 01:43

Ага, я тоже так же подумал. Спасибо за подтверждение..

Jeeva J 19.02.2019 06:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
206
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не должны проверять, что ToCreate сохраняет данные с помощью ToGet или ToGet путем создания данных с помощью ToCreate. Причина в том, что ваш UT не изолирован, и вы не проверяете одно поведение. Также ваш UT может пройти в тех случаях, когда он не должен.

Что ты должен делать: Для каждого из методов создайте тестовые примеры, затем для каждого тестового примера создайте UT и, если есть взаимодействие с контекстом БД, убедитесь, что взаимодействие произошло правильным образом.

Например, успешно сохранить один объект:

[Fact]
public void ToCreate_Persist_One_Oblect(){
   //arrange:
   var sut = new Repository(context);

   //act
   sut.ToCreate(new XYzClass(){
       ... some properties
   });

   //assert:
   var newlyCreatedXyz = context.XYZ.FirstOfDefualt(/*get the item*/);
   Assert.NotNull(newlyCreatedXyz);
   /*Then asset the properties*/
}

Если вы собираетесь использовать фиктивный фреймворк вместо базы данных в памяти, вы можете смоделировать DbContext и проверить взаимодействие.

Другие вопросы по теме