1

我正在尝试使用 CppUnit 测试,这是从CppUnit Cookbook借来的简单测试代码。该系统是带有 g++ 4.2.1 的 Mac OS X。

#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/ui/text/TestRunner.h>
#include <iostream>

class Board
{
    int m_x, m_y;
public:
    Board(int x, int y) : m_x(x), m_y(y) {}  
    bool operator==(const Board& other) const
    {
        return  (m_x == other.m_x && m_y == other.m_y);
    } 
    int getX() {return m_x;}
    int getY() {return m_y;}
};

inline std::ostream &operator <<( std::ostream &os, Board &value )
{
    return os << "Board <x =" << value.getX() << "; y = " << value.getY() << "> \n";
}

class BoardTest : public CppUnit::TestFixture {
    Board *m_10_20, *m_10_20p, *m_10_30;
public:
    BoardTest() {}
    void setUp() 
    {
        m_10_20 = new Board(10,20);
        m_10_20p = new Board(10,20);
        m_10_30 = new Board(10,30);
    }
    void tearDown()
    {
        delete m_10_20; delete m_10_20p; delete m_10_30;
    }
    void testX()
    {
        CPPUNIT_ASSERT(*m_10_20 == *m_10_20p);
    }
    void testY()
    {
        CPPUNIT_ASSERT(!(*m_10_20 == *m_10_30));
    }
    static CppUnit::Test *suite()
    {
        CppUnit::TestSuite *testsuite = new CppUnit::TestSuite("Board test");
        suite->addTest(new CppUnit::TestCaller<BoardTest>("testX", &BoardTest::testX));
        suite->addTest(new CppUnit::TestCaller<BoardTest>("testY", &BoardTest::testY));        
        return testsuite;
    }
};

int main()
{

    CppUnit::TextUi::TestRunner runner;

    runner.addTest(BoardTest::suite() );

    bool retcode = runner.run();
    return retcode;
}

当我运行它时,我收到以下错误。

simple4.cpp:48:错误:在“BoardTest::suite”中请求成员“addTest”,它是非类类型“CppUnit::Test* ()()”
simple4.cpp:49:错误:在“BoardTest::suite”中请求成员“addTest”,它是非类类型“CppUnit::Test* ()()”

以下等效代码可以正常工作。可能有什么问题?第一个(之前的)示例是否已过时?

#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/ui/text/TestRunner.h>
#include <iostream>

class Board
{
    int m_x, m_y;
public:
    Board(int x, int y) : m_x(x), m_y(y) {}  
    bool operator==(const Board& other) const
    {
        return  (m_x == other.m_x && m_y == other.m_y);
    } 
    int getX() {return m_x;}
    int getY() {return m_y;}
};

inline std::ostream &operator <<( std::ostream &os, Board &value )
{
    return os << "Board <x =" << value.getX() << "; y = " << value.getY() << "> \n";
}

class BoardTest : public CppUnit::TestFixture {
    CPPUNIT_TEST_SUITE(BoardTest);
        CPPUNIT_TEST(testX);
        CPPUNIT_TEST(testY);
    CPPUNIT_TEST_SUITE_END();
    Board *m_10_20, *m_10_20p, *m_10_30;
public:
    BoardTest() {}
    void setUp() 
    {
        m_10_20 = new Board(10,20);
        m_10_20p = new Board(10,20);
        m_10_30 = new Board(10,30);
    }
    void tearDown()
    {
        delete m_10_20; delete m_10_20p; delete m_10_30;
    }
    void testX()
    {
        CPPUNIT_ASSERT(*m_10_20 == *m_10_20p);
    }
    void testY()
    {
        CPPUNIT_ASSERT(!(*m_10_20 == *m_10_30));
    }
};

int main()
{
    CppUnit::TestSuite *suite = BoardTest::suite();
    CppUnit::TextUi::TestRunner runner;

    runner.addTest(suite);

    bool retcode = runner.run();
    return retcode;
}
4

0 回答 0