CPPUNIT_ASSERT_EQUAL на std :: unique_ptr

Я хочу проверить, возвращает ли мое приложение уникальный идентификатор nullptr. Я пробовал кое-что, но компилятор не прошел. Я надеюсь, что кто-то уже попробовал и нашел способ заставить эту работу работать. Некоторые вещи, которые я пробовал:

std::unique_ptr<SomeClass> some_class_ptr;

CPPUNIT_ASSERT_EQUAL(std::unique_ptr<SomeClass>(), some_class_ptr);

дает: libcppunit / include / cppunit / TestAssert.h | 49 | ошибка: нет совпадения для ‘operator ‹★’ в ‘ost‹ ’x’ |

Внутри 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])’ |


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


person Minion91    schedule 24.09.2012    source источник
comment
Не работает ли статическое приведение к одному и тому же типу?   -  person balki    schedule 24.09.2012
comment
Я не думаю, что это будет иметь те же проблемы, что и в примере 1.   -  person Minion91    schedule 24.09.2012


Ответы (2)


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

CPPUNIT_ASSERT(nullptr == some_class_ptr);

or

CPPUNIT_ASSERT(!some_class_ptr);
person ecatmur    schedule 24.09.2012
comment
Спасибо, это прекрасно работает. К сожалению, я не могу использовать ASSERT_EQUAL, это выглядит лучше, imho. - person Minion91; 24.09.2012
comment
Это так раздражает по сравнению с gtest, где такие вещи просто работают - person paulm; 18.10.2013

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

person Cheers and hth. - Alf    schedule 24.09.2012