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

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

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2014, 18:51   #11
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

К стати, а какие есть идеи по поводу юнит-тестов функций орудующих сложными структурами данных?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 28.01.2014, 10:21   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Да ты что? - на том форуме тебя жестко обманули и дали кусок кода из qglobal.h (а выдали за свой, раз ты не вкурсе что это стандартная функция и пишешь его в каждом проекте).
Но вместо того, чтобы спрашивать на форумах, можно поискать в ассистанте. А перед тем как утверждать, что чего-то нет, можно опять же поискать в ассистанте. Я не помню время, когда в кьют не было qFuzzyCompare.

Код:
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) Q_REQUIRED_RESULT;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2)
{
    return (qAbs(p1 - p2) * 1000000000000. <= qMin(qAbs(p1), qAbs(p2)));
}

Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1, float p2) Q_REQUIRED_RESULT;
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(float p1, float p2)
{
    return (qAbs(p1 - p2) * 100000.f <= qMin(qAbs(p1), qAbs(p2)));
}
Скопипащено дословно.
Никто никого не обманывал. Человек, который ответил (wysota) это один из создателей того форума (http://www.qtcentre.org/) и соавтор книги "Foundation of Qt Development". Зачем такому солидному человеку кого-то обманывать?

И где тут обман? Он просто использовал реализацию и ИЗМЕНИЛ ЕЁ. Ты видишь, что эти фукнции РАЗНЫЕ? Обрати внимание на число 0.0001

Код:
static inline bool qFuzzyCompare(double p1, double p2)
{
    return (qAbs(p1 - p2) <= 0.0001 * qMin(qAbs(p1), qAbs(p2)));
}
Он там посоветовал, что можешь использовать qFuzzyCompare для рализации функции с delta. Вот так:

Код:
static inline bool qFuzzyCompare(double p1, double p2, double delta)
{
    return (qAbs(p1 - p2) <= delta * qMin(qAbs(p1), qAbs(p2)));
}
Я сначала не стал делать реализацию этой функции с дельтой, а теперь изменил код в основной статье, чтобы не было вопросов. Функция qFuzzyCompare теперь с дельтой. Это уже другая функция с тем же названием и немного похожей реализацией. Думаю, вопрос исчерпан.


Цитата:
Сообщение от ROD Посмотреть сообщение
К стати, а какие есть идеи по поводу юнит-тестов функций орудующих сложными структурами данных?
Я пока не думал об этом. Нужно будет придумать какой-нибудь подходящий и интересный пример. Пока мыслей нет. Тестирую только методы, которые возвращают вещ. и целые числа, строки и bool.

Нужно будет ещё когда-нибудь разобраться, что такое "Fake-, mock-объекты". Возможно в этом кроется ответ.

Вот тут немного написано о Fake-, mock-объектах: http://ru.wikipedia.org/wiki/%D0%A0%...81.D1.82.D1.8B

Последний раз редактировалось 8Observer8; 28.01.2014 в 10:27.
8Observer8 вне форума Ответить с цитированием
Старый 28.01.2014, 10:37   #13
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Нужно будет ещё когда-нибудь разобраться, что такое "Fake-, mock-объекты". Возможно в этом кроется ответ.
Mock-объекты - вобщем-то просто заглушки. (когда вам надо протестировать кусок, работающий с объектом, который вы еще не реализовали).

Что касается Fake-объектов, насколько я понял это просто реализация интерфейса объекта. (т.е. фактически без какой-либо заглушки).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 28.01.2014, 10:43   #14
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Mock-объекты - вобщем-то просто заглушки. (когда вам надо протестировать кусок, работающий с объектом, который вы еще не реализовали).

Что касается Fake-объектов, насколько я понял это просто реализация интерфейса объекта. (т.е. фактически без какой-либо заглушки).
Спасибо! Я позже придумаю какой-нибудь пример с Fake-, mock-объектами.
8Observer8 вне форума Ответить с цитированием
Старый 29.04.2014, 16:42   #15
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Фреймворк QTest не поддерживает ни тестирование исключений, ни сравнение вещественных результатов, ни Mock-объектов. Здесь инструкция по самому продвинутому TDD-фреймворку на C++ - http://www.prog.org.ru/topic_26944_0.html

Последний раз редактировалось 8Observer8; 30.04.2014 в 07:58.
8Observer8 вне форума Ответить с цитированием
Старый 26.06.2014, 09:33   #16
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Написал пример: http://www.prog.org.ru/index.php?top...4685#msg194685
8Observer8 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор тестов + онлайн тестирование sereniaaa Фриланс 6 17.01.2014 23:10
TDD (Test-driven development) для C# (csUnit) 8Observer8 C# (си шарп) 12 22.11.2012 13:59
статья - Test-Driven Development для Java(TDD, разработка через тестирование) на практике. Pblog Обсуждение статей 0 16.06.2011 23:10