std :: unique_ptr上的CPPUNIT_ASSERT_EQUAL

时间:2012-09-24 12:15:08

标签: c++ c++11 cppunit

我想测试我的应用程序是否返回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 |错误:'ost&lt;&lt;'中的'运算符&lt;&lt;'不匹配X” |

Inside 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&amp;,CppUnit :: SourceLine,const char [1])'| < / p>


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])' |


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

2 个答案:

答案 0 :(得分:3)

CPPUNIT_ASSERT_EQUAL requires its arguments to be of exactly the same type.由于您不需要输出nullptr参数的表示,您只需使用CPPUNIT_ASSERT

CPPUNIT_ASSERT(nullptr == some_class_ptr);

CPPUNIT_ASSERT(!some_class_ptr);

答案 1 :(得分:2)

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