Правильный подход к написанию Модульных тестов
Есть задача по написанию модульных тестов. После прохождения нескольких онлайн-курсов и перечитав пару тройку статей, не очень могу понять суть тестирования, что тестировать, как и зачем.
Почему возникают такие вопросы? Потому что в примерах обычно тестируют что угодно, вот вообще всё. Для примера, вырезка из документации Microsoft:
[Fact]
public void IsPrime_InputIs1_ReturnFalse()
{
var primeService = new PrimeService();
bool result = primeService.IsPrime(1);
Assert.False(result, "1 should not be prime");
}
Немного вводит в ступор название IsPrime_InputIs1_ReturnFalse
. Почему false
? Почему не true
? А если у меня метод будет возвращать какой-то int
? Мне делать uint.MaxValue
количество тестов для проверки каждого результата? Я ведь могу сделать ещё тест, что бы проверять, больше ли возвращаемое значение метода Method
определённого числа x
или нет. А количество значений такого x
так же примерно равно uint.MaxValue
.
Для примера, есть сервис который из базы данных вытягивает список продуктов. Что мне тестировать в этом случае? Я ведь не могу тестировать вообще все допустимые варианты развития событий, потому что их бесчисленное множество.
Какой конечный результат тестов и как он должен влиять на программу? На уровне эндпоинтов стоит валидация запросов, не я ведь могу тестировать сервис закидывая туда запросы, которые должны были отвалидироваться? Как этот тест потому должен влиять на систему?
Как тестировать базу данных? Есть ли какие-то обобщённые практики кроме того, что создавать тестовую базу данных либо memory data collection
?