CPPUNIT_ASSERT_EQUAL для std :: unique_ptr

Я хочу проверить, возвращает ли мое приложение 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])’ |


Я думаю, что первый должен быть правильным, но он не компилируется. Кто-нибудь может дать мне правильную конструкцию для этого?

3

Решение

CPPUNIT_ASSERT_EQUAL требует, чтобы его аргументы были точно такого же типа. Поскольку вам не нужно иметь возможность выводить представление nullptr аргумент, вы можете просто использовать CPPUNIT_ASSERT:

CPPUNIT_ASSERT(nullptr == some_class_ptr);

или же

CPPUNIT_ASSERT(!some_class_ptr);
3

Другие решения

Проблема, кажется, с CPPUNIT_ASSERT_EQUAL, но я не вижу веских причин использовать это. Я предполагаю, что есть CPPUNIT_ASSERT или тому подобное (проверьте документацию или источники). Тогда просто пиши CPPUNIT_ASSERT( some_class_ptr().get() == 0 )или действительно любое выражение, которое вы предпочитаете для проверки нулевого указателя.

2

По вопросам рекламы [email protected]