4

我想测试我的应用程序是否返回 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|error: no match for 'operator<<' in '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: no matching function for call to 'assertEquals(std::nullptr_t, std::unique_ptr&, CppUnit::SourceLine, const char [1])'|


CPPUNIT_ASSERT_EQUAL(nullptr, some_class_ptr.get());

给出:/tests/SomeTestClass.cpp|432|错误:没有匹配函数调用 'assertEquals(std::nullptr_t, std::unique_ptr::pointer, CppUnit::SourceLine, const char [1])'|


我认为第一个应该是正确的,但它没有编译。谁能给我一个正确的结构?

4

2 回答 2

4

CPPUNIT_ASSERT_EQUAL要求其参数的类型完全相同。 由于您不需要能够输出参数的表示nullptr,您可以使用CPPUNIT_ASSERT

CPPUNIT_ASSERT(nullptr == some_class_ptr);

或者

CPPUNIT_ASSERT(!some_class_ptr);
于 2012-09-24T12:25:36.207 回答
3

问题似乎与CPPUNIT_ASSERT_EQUAL,但我看不出有什么好的理由使用它。我假设有一个CPPUNIT_ASSERT或类似的(检查文档或来源)。然后只需编写CPPUNIT_ASSERT( some_class_ptr().get() == 0 ),或者您喜欢的任何表达式来检查指针是否为空。

于 2012-09-24T12:19:21.087 回答