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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Тестирование UI компонентов (РЕШЕНО)  (Прочитано 7720 раз)
nvek
Гость
« : Март 02, 2017, 11:44 »

Вообщем как тестировать, если они в закрыты в приват?
сделать паблик?
Код:
//private:
Ui::ConnectedForm ui;
ведь не надо так делать?
есть идея просто тыкать вначале Два таба, чтобы курсор перешол на поле, дальше еще таб, еще интер.....
как вы делаете?
« Последнее редактирование: Март 06, 2017, 10:24 от nvek » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 02, 2017, 11:49 »

Код
C++ (Qt)
#ifdef TEST
public:
#else
private:
#endif
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
nvek
Гость
« Ответ #2 : Март 02, 2017, 12:04 »

почему то кажется, что так тоже делать нельзя
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 02, 2017, 12:13 »

Можно еще тест френдом делать. А можно методом Павлика Морозова:
Код
C++ (Qt)
#define private public
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
nvek
Гость
« Ответ #4 : Март 02, 2017, 12:25 »

а можно поподробнее?
вот например тест, который заполняет комбобоксы и жмякает ентер.

Код:
void ConnectedFormTests::test_ConnectionFormConnect()
{
QFETCH(QString, id);
QFETCH(QString, hostName);
QFETCH(QString, expecded);

ConnectedForm* v = new ConnectedForm(NULL);
v->show();

QTest::keyClick(v, Qt::Key_Tab);
QTest::keyClick(v, Qt::Key_Tab);
QTest::keyClicks(v, id);
QTest::keyClick(v, Qt::Key_Tab);
QTest::keyClicks(v, hostName);


msgBoxProcessTimer.start();
QTest::keyClick(v, Qt::Key_Enter);

if(expecded != "")
QCOMPARE(msgBoxMessage, expecded);

delete v;
}
раньше были v->ui.combobox ,,,,,,
несложно заменить
Записан
nvek
Гость
« Ответ #5 : Март 02, 2017, 12:33 »

class ConnectedForm; //дружественный класс

class ConnectedFormTests : public QObject
{
   Q_OBJECT
private slots:
///
public:
   friend ConnectedForm;

Код:
void ConnectedFormTests::test_ConnectionFormConnect()
{
QFETCH(QString, id);
QFETCH(QString, hostName);
QFETCH(QString, expecded);

ConnectedForm* v = new ConnectedForm(NULL);
v->show();


QTest::keyClicks(v->ui.comboBox, id);
//QTest::keyClick(v, Qt::Key_Tab);
QTest::keyClicks(v->ui.comboBox_2, hostName);


msgBoxProcessTimer.start();
QTest::keyClick(v->ui.btnConnect, Qt::LeftButton);

if(expecded != "")
QCOMPARE(msgBoxMessage, expecded);

delete v;
}
но почему то ругается
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Март 02, 2017, 12:41 »

ConnectedFormTests надо врендом делать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
nvek
Гость
« Ответ #7 : Март 02, 2017, 12:42 »

я думаю, что можно как то к objectName обратиться
Записан
nvek
Гость
« Ответ #8 : Март 02, 2017, 13:50 »

Допустим если это не ui компонент, и все создано без дизайнера, и все компоненты в привате.
как к ним обратиться чтобы тестировать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 02, 2017, 13:59 »

1. Как я уже выше написал - сделать пабликов для тестов.
2. Проставить всем objectName и искать через findChild у QWidget
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #10 : Март 03, 2017, 00:48 »

Имхо, для тестов нужно посылать события кликов мыши и нажатия клавиш окну. Т.е. эмулировать то, что делает пользователь.

P.S. UI сделан в дизайнере или в С++ коде, private/public - это все неважно.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Март 03, 2017, 06:25 »

nvek, в твоём примере ConnectedForm-у разрешается доступ к ConnectedFormTests-у, а не наоборот.
Т.е. если в неком классе А в качестве друга ты указал класс Б, это означает, что Б теперь имеет доступ к членам класса А.
Записан

Юра.
nvek
Гость
« Ответ #12 : Март 06, 2017, 10:23 »

уи в привате, все как надо.
вот как у меня получилось:
Код:
QFETCH(QString, id);
QFETCH(QString, hostName);
QFETCH(QString, expecded);

ConnectedForm* v = new ConnectedForm(NULL);
v->show();

QPushButton * btnConn = v->findChild<QPushButton*>(QStringLiteral("btnConnect"));
QComboBox* cmb1 = v->findChild<QComboBox*>(QStringLiteral("comboBox"));
QComboBox* cmb2 = v->findChild<QComboBox*>(QStringLiteral("comboBox_2"));

QTest::keyClicks(cmb1, id);
QTest::keyClicks(cmb2, hostName);
msgBoxProcessTimer.start();
btnConn->click();

if(expecded != "")
QCOMPARE(msgBoxMessage, expecded);

delete cmb1;
delete cmb2;
delete btnConn;
delete v;
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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