代码之家  ›  专栏  ›  技术社区  ›  Minion91

标准::unique_ptr上的CPPUNIT_SSERT_EQUAL

  •  4
  • Minion91  · 技术社区  · 13 年前

    我想测试我的应用程序是否返回nullptr唯一ptr。我尝试了一些东西,但没有通过编译器。我希望有人已经尝试并找到了一种方法来实现这一点。我尝试过的一些事情:

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

    给出:libcppunit/include/cpunit/TestAssert.h|49|错误:运算符<不匹配<在ost<<x|

    内部测试断言.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|错误:没有用于调用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])|


    我认为第一个应该是正确的,但它不是汇编。有人能给我一个正确的解释吗?

    2 回复  |  直到 13 年前
        1
  •  4
  •   ecatmur    13 年前

    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);
    
        2
  •  3
  •   Cheers and hth. - Alf    13 年前

    问题似乎出在 CPPUNIT_ASSERT_EQUAL ,但我看不出有什么好的理由使用它。我想有一个 CPPUNIT_ASSERT 等等(检查文档或来源)。那就写吧 CPPUNIT_ASSERT( some_class_ptr().get() == 0 ) ,或者您喜欢的任何用于检查指针为空的表达式。