Название: Тестирование закрытых и защищённых методов (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", то единственный способ тестирования методов класса будет - создание его объекта и вызов открытых методов (с последующем сравнением ожидаемых и актуальных результатов).
Пример класса: Код
Как протестировать 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 По идее все закрытые должны тестироваться публичными :) Если публичный не даёт ошибку, а закрытый даёт - плохая архитектура :)
|