Я пишу модульный тест/компонентный тест, используя Entity Framework Core InMemory Provider.
Когда я пишу модульный тест, я столкнулся со следующим вопросом.
У меня есть следующие два метода BL/DL.
ToCreateToGetПоэтому, когда я пишу модульный тест, мне нужно создать некоторые образцы данных для модульного теста.
Когда я пишу модульный тест для метода ToGet, могу ли я использовать ToCreate (метод BL) для создания образцов данных или Когда я пишу модульный тест для ToCreate, могу ли я использовать метод ToGet для проверки созданных данных? Это правильный выбор?
Упомянул следующее для создания модульного теста: https://thewikihow.com/video_ddrR440JtiA
Ага, я тоже так же подумал. Спасибо за подтверждение..





Вы не должны проверять, что 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 и проверить взаимодействие.
ToCreateне удастся (имеет ошибку), что произойдет с вашим модульным тестированиемToGet?