Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как в PHPUnit задать метод для конструктора?..


Автор: mus 15.5.2013, 13:38
Уважаемые, разработчики.
Разбираюсь с юнит-тестированием под php.
Есть класс (упрощаю для наглядности)

Код

Class TDate {
        public $startTime;
        
        function __construct() {
                $args = func_get_args();
                if(is_string($args[0]))
                        $this->startTime = ...;
                else
                        $this->startTime = ...;
        } 
}

 
И еще некоторые методы у этого класса.
Как покрыть методы класса я знаю - ключевое слово test перед названием метода.
А как определить тестируемую ситуацию для конструктора?..
Неужели test__construct?

В интернете ничего не нашел про это.

Автор: ksnk 15.5.2013, 14:05
Цитата(mus @  15.5.2013,  13:38 Найти цитируемый пост)
Разбираюсь с юнит-тестированием под php.

phpUnit?

В комплекте с phpStorm он сам считает покрытие. Достаточно использовать конструктор в каком-нибудь тесте и он уже "подсчитан и покрыт".

А в чем практический смысл полного покрытия? Все равно, 100% покрытие - это довольно искусственное  значение, нужное только и исключительно  для отчета начальника группы тестирования своему начальнику  smile

Добавлено через 3 минуты и 54 секунды
Обычно, тестируют ситуацию. 
Строят некие данные, подсовывают сгенерированной модельке эти данные, проверяют результат. Сама такая проверка запихивается в метод класса-юниттестера с именем test_***. Какие при этом методы зацепились - те и протестированы. В зависимости от разных данных некоторые методы можно и нужно перекрывать еще неоднократно, в зависимости от смысла и значения входных данных.

Автор: krundetz 20.5.2013, 09:10
Цитата(ksnk @  15.5.2013,  14:05 Найти цитируемый пост)
Все равно, 100% покрытие - это довольно искусственное  значение, нужное только и исключительно  для отчета начальника группы тестирования своему начальнику

ну почему же, ещё для сертификации систем связанных с высокими рисками для жизней людей

Автор: ksnk 20.5.2013, 10:06
Цитата(krundetz @  20.5.2013,  09:10 Найти цитируемый пост)
ну почему же, ещё для сертификации систем связанных с высокими рисками для жизней людей 

Практический смысл примерно тот же. Когда гром грянет - будет дополнительная отмазка. Гарантии корректной работы системы это все равно не дает, а вот возможность успокоится и сказать "я все отестировал, мне об этом code coverage сказал" - довольно опасна.

Автор: krundetz 20.5.2013, 10:54
Цитата(ksnk @  20.5.2013,  10:06 Найти цитируемый пост)
Гарантии корректной работы системы это все равно не дает, а вот возможность успокоится и сказать "я все отестировал, мне об этом code coverage сказал" - довольно опасна. 

без страховки от этого сертификацию не пройти

Мне нравиться фраза одного ответственного лица которую он сказал во время прохождения сертификации. Его спросили какие меры безопасности существуют на случай протечки бочек с агрессивным продуктом. Он сказал что бочки двойные и с датчиком на протечку. В случае протечки внутренней емкости и срабатывание датчика бочка подлежит немедленной замене. Его спросили а что будет если протечка будет сквозная на обе емкости и датчик откажет. Он сказал что на этот случай у них существует:
1. план эвакуации персонала, 
2. обученная бригада быстрого реагирования,
3. у бригады имеется специальное оборудование для быстрого устранения проблемы,
4. регулярно проводятся учения этой бригады,
5. регулярно проводиться проверка рабочего состояния спецооборудование,
6. нештатные ситуации тщательно анализируются и на основе этого меняется организация рабочего процесса.

Смысл всего этого в том что должна быть предусмотрена мера реагирования на нештатную ситуацию. Если она есть в большинстве мы получим надежную систему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)