Я хочу проверить, возвращает ли мое приложение nullptr уникальный ptr. Я пробовал несколько вещей, но ничего не получается через компилятор. Я надеюсь, что кто-то уже попробовал и нашел способ сделать эту работу. Некоторые вещи, которые я пробовал:
std::unique_ptr<SomeClass> some_class_ptr;
CPPUNIT_ASSERT_EQUAL(std::unique_ptr<SomeClass>(), some_class_ptr);
дает: libcppunit / include / cppunit / TestAssert.h | 49 | ошибка: нет совпадения для оператора ‘<<В живых << х»|
Внутри TestAssert.h:
template <class T>
void assertEquals( const T& expected,
const T& actual,
SourceLine sourceLine,
const std::string &message )
{
if ( !assertion_traits<T>::equal(expected,actual) ) // lazy toString conversion...
{
Asserter::failNotEqual( assertion_traits<T>::toString(expected),
assertion_traits<T>::toString(actual),
sourceLine,
message );
}
}
CPPUNIT_ASSERT_EQUAL(nullptr, some_class_ptr);
дает: /tests/SomeTestClass.cpp|432| error: нет соответствующей функции для вызова ‘assertEquals (std :: nullptr_t, std :: unique_ptr&, CppUnit :: SourceLine, const char [1]) ’|
CPPUNIT_ASSERT_EQUAL(nullptr, some_class_ptr.get());
дает: /tests/SomeTestClass.cpp|432| error: нет соответствующей функции для вызова ‘assertEquals (std :: nullptr_t, std :: unique_ptr :: pointer, CppUnit :: SourceLine, const char [1])’ |
Я думаю, что первый должен быть правильным, но он не компилируется. Кто-нибудь может дать мне правильную конструкцию для этого?
CPPUNIT_ASSERT_EQUAL
требует, чтобы его аргументы были точно такого же типа. Поскольку вам не нужно иметь возможность выводить представление nullptr
аргумент, вы можете просто использовать CPPUNIT_ASSERT
:
CPPUNIT_ASSERT(nullptr == some_class_ptr);
или же
CPPUNIT_ASSERT(!some_class_ptr);
Проблема, кажется, с CPPUNIT_ASSERT_EQUAL
, но я не вижу веских причин использовать это. Я предполагаю, что есть CPPUNIT_ASSERT
или тому подобное (проверьте документацию или источники). Тогда просто пиши CPPUNIT_ASSERT( some_class_ptr().get() == 0 )
или действительно любое выражение, которое вы предпочитаете для проверки нулевого указателя.