Внутри CPPUNIT_ASSERT, Keep Getting Access Violation

У меня есть набор классов, к которым я пытаюсь применить модульные тесты, чтобы поддерживать их текущую полезность в будущих версиях.

Моя проблема в том, что внутри CPPUNIT, к которому я новичок, где-то я вызываю CPPUNIT_ASSERT ([условие]), меня встречает ошибка Unhandled Exception...: Нарушение доступа в 0xffffffffffffffff.

Это случается, даже я пишу простейший тестовый пример

int main(){
 CPPUNIT_ASSERT ( true );
}

Я попытался вызвать свои функции тестирования с помощью ручных вызовов, а также добавить их в реестр, как это делается в примере "Деньги". Как сообщается, проблема возникает в конструкторе для SourceLine, поскольку строка имени файла, которую он ожидает, является плохим указателем.

После небольшого поиска я обнаружил, что это вызвано внутри CPPUNIT_ASSERT, так как это макрос со следующим определением

#define CPPUNIT_ASSERT(condition) \
 ( CPPUNIT_NS::Asserter::failIf( !(condition), \
 CPPUNIT_NS::Message( "assertion failed", \
 "Expression: " #condition), \
 CPPUNIT_SOURCELINE() ) )

Я искал учебники на сайте CppUnit и проверял stackoverflow, но я не нашел ничего, что обращается к этому в частности. Мне кажется странным, что то, что в каждом примере, которое я видел, однопараметрическая функция (assert), вызовет другую функцию без аргументов (sourceline), которая на самом деле является другим макросом, который предполагает, что он получает строку, но не может получить такую ​​вещь. Я обнаружил, что SourceLine - это класс, который по-прежнему имеет конструктор по умолчанию, но выше называется макросом, который действительно ссылается на конструктор с двумя параметрами, но не передается никаких аргументов, которые я могу видеть. Я в недоумении.

Я использую 64-битную компиляцию CppUnit, проверенную с помощью dumpbin и Visual Studio 2008.

1 ответ

Система утверждения Cppunit использует макросы, поэтому ожидается, что ваш простой пример жалуется на необработанное исключение.

Обычно вы не используете утверждение вне метода тестирования. Я предлагаю вам взглянуть на Cppunit Cookbook, в котором содержится некоторая информация и примеры того, как эффективно использовать cppunit.

licensed under cc by-sa 3.0 with attribution.