Допустим, у меня есть статический метод, который сравнивает два объекта для близкого соответствия и возвращает некоторый уровень достоверности [0,1].Как вернуть дополнительную информацию об отладке из метода?
class Foo
{
...
static double Compare(const Foo& foo1, const Foo& foo2);
...
};
Теперь мне нужно вернуть дополнительную отладочную информацию, содержащую данные сравнения, в зависимости от настройки в конфигурации. Поскольку эта отладочная информация не будет использоваться на производстве, но только в целях тестирования/отладки, мне было интересно, какой способ ее реализовать.
Я вижу, по крайней мере, три варианта:
1: Создать дополнительный CompareResult класса и хранить уверенность + опциональную информацию там. Не заполняйте дополнительную информацию, если вам это не нужно.
class CompareResult
{
...
private:
double confidence_;
CompareOptionalInfo compare_optional_info_;
...
};
...
static CompareResult Compare(const Foo& foo1, const Foo& foo2);
Это, кажется, самый чистый, но я не уверен, что я должен объединить результат возврата с дополнительной информацией.
2: Используйте выходной переменной (таким образом, нам не нужно, чтобы создать дополнительный класс, но наш метод подписи будет расти немного)
static double Compare(const Foo& foo1, const Foo& foo2, CompareOptionalInfo* out_compare_info = nullptr);
3: Отдельный метод сравнения с опциональным-инфо метода извлечения ,
static double Compare(const Foo& foo1, const Foo& foo2);
static CompareOptionalInfo GetCompareOptionalInfo();
Этот вариант был бы, вероятно, потребуется для хранения этого необязательного-инфо между вызовами методов и переход от статического сравнения метод экземпляра сравнить метод. Но опять же, я не уверен, что это уместно или нет.
Из вашего опыта, что подходит в мире ООП для возврата необязательной информации (которая будет в основном использоваться только в режиме отладки) из метода?
Планируете ли вы использовать отладчик или распечатывать дополнительную информацию только в режиме отладки? Если вы хотите использовать gdb и использовать такие команды, как 'call Foo :: compare (foo1, foo2)', вы не сможете задать опцию 'compare_optional_info_' опции 1. – Franck
Собираетесь ли вы создать свой производственный код в режиме отладки тест, или вы используете отдельную тестовую программу? – Peter
Это будет вопрос, основанный на мнениях (не по теме). Обычно я хотел бы, чтобы подразделение тестировало мои функции как «черные ящики», что они следуют спецификации и только заботятся о том, что происходит внутри (с точки зрения dbug), если они терпят неудачу. Если есть что-то там, вы действительно хотите провести тестирование единицы, а затем, возможно, можете поместить это в свою собственную функцию, пригодную для тестирования (вариант 1 или 2), и проверить эту функцию отдельно, а не компрометировать «API» с деталями тестирования. Другая возможность заключается в том, что * скомпилировать * информацию о регистрации в функции. – Galik