@TAnonim

Правильный подход к тестированию в приложениях на php?

В документации к PHPUnit и некоторых статьях встречается код такого типа:
public function testMethod() {
        $expectedResult = 100;
        $result = $this->testclass->testMethod(1, 2);
        $this->assertEquals($expectedResult, $result);
}

Несомненно, это лучше, чем писать var_dump'ы и проверять выходные значения методов вручную. Но вопрос в следующем: этот тест дает мне знать, корректно ли метод работает на значениях 1 и 2. И если я напишу еще 1000 такого типа тестов это лишь будет гарантировать, что всё хорошо на этих 1000 наборах данных, а вдруг ошибка как раз в другом, 1001-м наборе? Или я как-то не понимаю концепцию юнит-тестов.

И еще, на GitHub можно часто встретить теги "99% test coverage", "X% test coverage". Как они понимают, что продукт протестирован на n процентов? Как я могу понять, что мой метод на 100% протестирован?
  • Вопрос задан
  • 189 просмотров
Решения вопроса 2
toxicmt
@toxicmt
CTO at hexlet.io
coverage говорит о покрытии тестами конкретных строк. Если во время прогона тестов не были затронуты какие-то строки исходного кода, то coverage будет менее 100%. В среднем считается что хорошее покрытие это > 80%. 100% достичь слишком трудно и дорого (и не нужно).

> И если я напишу еще 1000 такого типа тестов это лишь будет гарантировать, что всё хорошо на этих 1000 наборах данных, а вдруг ошибка как раз в другом, 1001-м наборе?

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

Из интересного:

* property-based testing https://en.wikipedia.org/wiki/QuickCheck
* bdd behat.org/en/latest/guides.html
* browser tests https://codeception.com/
* как писать тесты (концептуальная история) https://ru.hexlet.io/blog/posts/how-to-test-code
Ответ написан
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Сначала нужно определять граничные случаи и выбирать тест внутри этих диапазонов.
Например в вашем случае используется два целых числа:
1. Даст ли метод верный ответ, если одно или оба числа отрицательные или равны нулю
2. Даст ли метод верный ответ, если в процессе произойдёт переполнение переменной
Остальное можно придумать в зависимости от декларации и кода метода.
Поэтому вполне можно проверить пары:
5, 19
-5, -19
5, -19
-5, 19
0, 19
5, 0
16874681246, 1254781628

если все тесты будут пройдены, то с большой вероятностью другие пары так же дадут верный результат.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 19:22
18000 руб./за проект
25 апр. 2024, в 19:21
10000 руб./за проект
25 апр. 2024, в 18:47
2795100 руб./за проект