c – std :: unique_ptr上的CPPUNIT_ASSERT_EQUAL
作者:互联网
我想测试我的应用程序是否返回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<<'中的'运算符<<'不匹配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])’|
我认为第一个应该是正确的,但它不是编译.谁能给我一个正确的结构呢?
解决方法:
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);
标签:c,c11,cppunit 来源: https://codeday.me/bug/20190901/1785551.html