Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 12:40   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Проблема с запуском тестов GTest. Первое знакомство.

Привет!

Решил освоить GTest по этому туториалу: http://www.bogotobogo.com/cplusplus/...test_gtest.php

Я сделал всё абсолютно тоже самое, но только для Qt.

То есть у меня теперь есть:
- статическая библиотека "libGoogleTest.a"
- функция, которую я буду тестировать:

SimpleMath.h
Код:
#ifndef SIMPLEMATH_H
#define SIMPLEMATH_H

#include <cmath>

double cubic(double d)
{
    return pow(d,3);
}

#endif // SIMPLEMATH_H
Создал новый проект с помощью которого буду тестировать. Подключил файлы ".h" и библиотеку libGoogleTest.a. Всё нормально компилируется.

Как я понимаю, из туториала выше, достаточно в main.cpp написать:

main.cpp
Код:
#include "gtest/gtest.h"
#include "SimpleMath.h"

TEST(testMath, myCubeTest)
{
    EXPECT_EQ(1000, cubic(10));
}
Но выдаётся ошибка, что нужна функция main():
Цитата:
qtmain_win.cpp:131: error: undefined reference to `qMain(int, char**)'
Очень хочется освоить этот фреймворк. Пожалуйста, помогите.

Последний раз редактировалось 8Observer8; 28.04.2014 в 12:44.
8Observer8 вне форума Ответить с цитированием
Старый 28.04.2014, 13:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}
по аналогии напишите свой qMain.
я думаю разница именно в названии мейна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.04.2014, 13:51   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Огромное спасибо! Я создал обычный пустой проект С++ (без Qt-штучек) Поэтому ничего в qMain менять не надо.

main.cpp
Код:
#include "gtest/gtest.h"
#include "SimpleMath.h"

TEST( testMath, myCubeTest ) {
    EXPECT_EQ( 1000, cubic( 10 ) );
}

int main( int argc, char **argv ) {
    ::testing::InitGoogleTest( &argc, argv );
    return RUN_ALL_TESTS( );
}
Output:
Цитата:
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from testMath
[ RUN ] testMath.myCubeTest
[ OK ] testMath.myCubeTest (0 ms)
[----------] 1 test from testMath (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (1 ms total)
[ PASSED ] 1 test.

Последний раз редактировалось 8Observer8; 28.04.2014 в 13:55.
8Observer8 вне форума Ответить с цитированием
Старый 29.04.2014, 16:36   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Написал пошаговую инструкцию "Разработка ПО на Qt c помощью методологии TDD и фреймворка Google Test (GTest)" http://www.prog.org.ru/topic_26944_0.html
8Observer8 вне форума Ответить с цитированием
Старый 29.04.2014, 22:05   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Оставлю пару полезных заметок про вещественные результаты и исключения.

При нормальных условиях функция не должна выбрасывать исключения, поэтому всегда в тестах надо использовать ASSERT_NO_THROW:
Код:
TEST( test001, normalTest ) {
    int input = 15;
    int expected = 120;

    int actual = 0;
    ASSERT_NO_THROW({
                        actual = myFunc( input );
                    });
    ASSERT_EQ( expected, actual );
}
Если функция при определённых входных данных выбрасывает исключение и вы его ожидаете (например, ваше исключение называется OutOfRange), то надо указать тип исключения:
Код:
TEST( test002, exeptionTest ) {
    int input = 10001;

    ASSERT_THROW({
                     myFunc( input );
    }, OutOfRange);
}
Если вы хотите сравнивать вещественные: ожидаемый результат и выходной результат функции с погрешностью дельта, то надо использовать ASSERT_NEAR:
Код:
TEST( test003, normalTest ) {
    int input = 5;
    double expected = 25.0;

    double actual = 0.0;
    ASSERT_NO_THROW({
                        actual = myFunc( n );
                    });
    double delta = 0.001;
    ASSERT_NEAR( expected, actual, delta );
}

Последний раз редактировалось 8Observer8; 29.04.2014 в 22:30.
8Observer8 вне форума Ответить с цитированием
Старый 26.06.2014, 09:26   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Написал пример: http://www.prog.org.ru/index.php?top...4685#msg194685

Последний раз редактировалось 8Observer8; 26.06.2014 в 09:32.
8Observer8 вне форума Ответить с цитированием
Старый 19.09.2016, 16:14   #7
Nick1000
Новичок
Джуниор
 
Регистрация: 19.09.2016
Сообщений: 2
По умолчанию

Добрый день!
Начал разбираться с GTF и Qt.
Я новичок и мне немного сложно.
Не могли ли бы вы обьяснить как подключить Gtest к Qt и пользоваться им?
Что нужно делать, как компоновать , а то все лес темный(
Nick1000 вне форума Ответить с цитированием
Старый 19.09.2016, 16:40   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Nick1000 Посмотреть сообщение
Добрый день!
Начал разбираться с GTF и Qt.
Я новичок и мне немного сложно.
Не могли ли бы вы обьяснить как подключить Gtest к Qt и пользоваться им?
Что нужно делать, как компоновать , а то все лес темный(
Лично я объяснить не могу, так как 1.5 года как перешёл на C# и фреймворк .NET. Лучше начните разбираться c C# и NUnit. Это гораздо проще.
8Observer8 вне форума Ответить с цитированием
Старый 19.09.2016, 16:50   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Скорее всего так же, как и без Qt. Ну или в Qt вроде бы есть свой QtTest, можно для начала его попробовать. http://doc.qt.io/qt-5/qttest-index.html

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Лучше начните разбираться c C# и NUnit. Это гораздо проще.
Проще для чего? Цели разные могут быть. Например, кроссплатформенность или использование существующего С/С++ кода, библиотек (что проще без .NET)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 19.09.2016, 16:55   #10
Nick1000
Новичок
Джуниор
 
Регистрация: 19.09.2016
Сообщений: 2
По умолчанию

Спасибо, но мне нужен именно гугловский тестер)
А как без qt? В том то и дело что я не понимаю как и куда его ставить и подключать...
Nick1000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пошаговая инструкция. Создание юнит-тестов (модульных тестов) на Qt C++. Разработка через тестирование (TDD - test-driven developm 8Observer8 Qt и кроссплатформенное программирование С/С++ 15 26.06.2014 09:33
Первое знакомство с классами Андрей! Общие вопросы C/C++ 7 02.03.2012 22:32
Проблема с запуском Ice Cold Компьютерное железо 5 04.06.2009 01:10
Проблема с запуском Rio309 Компьютерное железо 6 21.02.2009 00:43
Проблема с запуском boroda Помощь студентам 5 11.01.2009 11:52