Russian Qt Forum
Ноябрь 24, 2024, 14:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тестирование закрытых и защищённых методов (QTest)  (Прочитано 6153 раз)
8Observer8
Гость
« : Апрель 08, 2014, 20:50 »

Привет!

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

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

Заранее спасибо за ответ!
« Последнее редактирование: Апрель 08, 2014, 21:56 от 8Observer8 » Записан
Johnik
Крякер
****
Online Online

Сообщений: 339


Просмотр профиля
« Ответ #1 : Апрель 08, 2014, 21:00 »

как вариант перед #include в тесте ставить #define private public, но правильно ли это...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Апрель 08, 2014, 21:10 »

По моему достаточно тестировать только публичные методы. Они как раз и пользуются закрытыми. Если в закрытом методе будет ошибка, то скорее всего это повлияет на результат работы публичного метода.
В дополнение к тестированию я очень активно использую ассерты и логирование.
Записан
8Observer8
Гость
« Ответ #3 : Апрель 08, 2014, 21:31 »

Спасибо за ответы! С #define попробую, может понравится. А тестировать закрытые через публичные, крайне затруднительно. Может с дизайном методов у меня проблемы Улыбающийся Я всё же предпочитаю для каждого метода свои тесты писать. Придёться и дальше менять на время тестирования private и protected на public.

Значит нет никакой хитрости в QTest. А жаль. В упрёк разработчикам QTest - в JUnit (это фреймворк для Java) можно тестировать защищённые и закрытые методы:
« Последнее редактирование: Апрель 08, 2014, 21:33 от 8Observer8 » Записан
Hrundel
Гость
« Ответ #4 : Апрель 09, 2014, 21:41 »

Читай темы по UnitTest. Эти тесты направлены на тестирование закрытых классов и методов.
Записан
8Observer8
Гость
« Ответ #5 : Апрель 10, 2014, 11:22 »

Спасибо за ответ! Не нашёл. Не представляю, как получить доступ к закрытым и защищённым методам в проекте "Qt Unit Test".
Записан
Hrundel
Гость
« Ответ #6 : Апрель 10, 2014, 12:11 »

Может быть ты не правильно понимаешь, что означает UnitTest?

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

Разработка тестов для Unita заключается в тестировании всех критических, придельных и ошибочных параметров ввода-вывода. Если при ошибочном параметре класс продолжает работу не обрабатывая исключения - это неправильно, значит есть ошибка. Класс QtUnitTest только помогает упростить некоторые процессы разработки UnitTesta
« Последнее редактирование: Апрель 10, 2014, 12:19 от Hrundel » Записан
8Observer8
Гость
« Ответ #7 : Апрель 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 (на время тестирования).
« Последнее редактирование: Апрель 10, 2014, 12:29 от 8Observer8 » Записан
Hrundel
Гость
« Ответ #8 : Апрель 10, 2014, 12:58 »

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

Теперь понятно.
Нет, переделывать на public нельзя. Это Black Box Test. Можно только дописать логи сообщений в консоли или в окнах и по ним отслеживать правильность результатов.
Потом убрать, конечно, когда они будут не нужны.
Записан
Bepec
Гость
« Ответ #9 : Апрель 10, 2014, 13:24 »

По идее все закрытые должны тестироваться публичными Улыбающийся Если публичный не даёт ошибку, а закрытый даёт - плохая архитектура Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.222 секунд. Запросов: 23.