Russian Qt Forum

Qt => Общие вопросы => Тема начата: 8Observer8 от Апрель 08, 2014, 20:50



Название: Тестирование закрытых и защищённых методов (QTest)
Отправлено: 8Observer8 от Апрель 08, 2014, 20:50
Привет!

Как в QTest тестировать закрытые и защищённые методы?

Я нашёл только один выход - это на время тестирования делать их открытыми. Но это не очень удобно. К тому же, можно случайно забыть изменить на private/protected.

Заранее спасибо за ответ!


Название: Re: Тестирование защищённых методов (QTest)
Отправлено: Johnik от Апрель 08, 2014, 21:00
как вариант перед #include в тесте ставить #define private public, но правильно ли это...


Название: Re: Тестирование защищённых методов (QTest)
Отправлено: Old от Апрель 08, 2014, 21:10
По моему достаточно тестировать только публичные методы. Они как раз и пользуются закрытыми. Если в закрытом методе будет ошибка, то скорее всего это повлияет на результат работы публичного метода.
В дополнение к тестированию я очень активно использую ассерты и логирование.


Название: Re: Тестирование защищённых методов (QTest)
Отправлено: 8Observer8 от Апрель 08, 2014, 21:31
Спасибо за ответы! С #define попробую, может понравится. А тестировать закрытые через публичные, крайне затруднительно. Может с дизайном методов у меня проблемы :) Я всё же предпочитаю для каждого метода свои тесты писать. Придёться и дальше менять на время тестирования private и protected на public.

Значит нет никакой хитрости в QTest. А жаль. В упрёк разработчикам QTest - в JUnit (это фреймворк для Java) можно тестировать защищённые и закрытые методы:
(http://i7.pixs.ru/storage/6/2/8/164png_3507026_11607628.png)


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: Hrundel от Апрель 09, 2014, 21:41
Читай темы по UnitTest. Эти тесты направлены на тестирование закрытых классов и методов.


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: 8Observer8 от Апрель 10, 2014, 11:22
Спасибо за ответ! Не нашёл. Не представляю, как получить доступ к закрытым и защищённым методам в проекте "Qt Unit Test".


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: Hrundel от Апрель 10, 2014, 12:11
Может быть ты не правильно понимаешь, что означает UnitTest?

UnitTest - это отдельно взятый закрытый класс и к нему написана тестовая мини-программа. Тестируется этот класс НЕ В КОНТЕКСТЕ конечного продукта, а отдельно сам по себе. Если класс работает в UnitTeste без ошибок - следовательно ошибки необходимо искать в логике программы.

Разработка тестов для Unita заключается в тестировании всех критических, придельных и ошибочных параметров ввода-вывода. Если при ошибочном параметре класс продолжает работу не обрабатывая исключения - это неправильно, значит есть ошибка. Класс QtUnitTest только помогает упростить некоторые процессы разработки UnitTesta


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: 8Observer8 от Апрель 10, 2014, 12:24
Да, я тестирую классы не в контексте проекта. Попробую объяснить доходчивее. Если с помощью Qt Creator создать проект "Other Project" -> "Qt Unit Test", то единственный способ тестирования методов класса будет - создание его объекта и вызов открытых методов (с последующем сравнением ожидаемых и актуальных результатов).

Пример класса:
Код
C++ (Qt)
class Foo {
   // ...
private:
   double doSomething( double a, double b );
};
 

Как протестировать doSomething()? В JUnit (для Java) - есть такая возможность (см. Ответ #3). А в QTest единственный способ - это заменить private на public (на время тестирования).


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: Hrundel от Апрель 10, 2014, 12:58
Как протестировать doSomething()? В JUnit (для Java) - есть такая возможность (см. Ответ #3). А в QTest единственный способ - это заменить private на public (на время тестирования).

Теперь понятно.
Нет, переделывать на public нельзя. Это Black Box Test. Можно только дописать логи сообщений в консоли или в окнах и по ним отслеживать правильность результатов.
Потом убрать, конечно, когда они будут не нужны.


Название: Re: Тестирование закрытых и защищённых методов (QTest)
Отправлено: Bepec от Апрель 10, 2014, 13:24
По идее все закрытые должны тестироваться публичными :) Если публичный не даёт ошибку, а закрытый даёт - плохая архитектура :)