При проектировании функций внутри класса C++ я часто помню об испытаниях. Поэтому, когда я заканчиваю всех функционалистов класса, очень часто в класс добавляются несколько функций, которые используются только для целей тестирования. Рассмотрим следующий пример:Эффект избыточных функций тестирования внутри класса C++
class SimpleClass
{
public:
int a;
int b;
void fun1();
void fun2();
void testIntermediateResult();
private:
void _fun1();
void _fun2();
};
В этой функции testIntermediateResult
необходим только для целей тестирования. Это хорошая практика, просто оставить функцию внутри класса, или я должен сделать что-то вроде этого:
class SimpleClass
{
public:
int a;
int b;
void fun1();
void fun2();
#ifdef TESTING
void testIntermediateResult();
#endif
private:
void _fun1();
void _fun2();
};
Философия здесь, когда этот класс был закончен тестирование и будет предоставлена клиентам то ИСПЫТАНИЯ будут определены и эта функция не будет внутри класса. Поэтому мой вопрос: действительно ли нужно удалить функцию тестирования, когда класс предоставляется клиенту? Предположим, что клиент не будет использовать функцию тестирования, каков эффект добавления нескольких избыточных функций тестирования внутри класса? Благодарю.
Я бы назвал его 'TESTED'. '#ifndef TESTING' звучит как« если мы не тестируем его », что является противоположностью того, что вы описали ... – starsplusplus
Лучше всего разрабатывать классы, которые не делают слишком много, t должны включать в себя произвольные функции тестирования. – juanchopanza
Это отличная практика, если вам нравится неопределенное поведение. Если вы скомпилируете один источник с помощью 'TESTING', а другой - без него, вы получите неопределенное поведение. (Конечно, все равно это сработает. Но вы никогда не знаете, если бы я писал компилятор, это не скомпилировалось.) –