1

ファイルに次のコードがありますtested.cpp

#include <iostream>
using namespace std;

class tested {
    private:
        int x;
    public:
        tested(int x_inp) {
            x = x_inp;
        }

        int getValue() {
            return x;
        }
};

私は別のファイル(と呼ばれるtesting.cpp)もあります:

#include <cppunit/extensions/HelperMacros.h>
#include "tested.cpp"

class TestTested : public CppUnit::TestFixture
{
    CPPUNIT_TEST_SUITE(TestTested);
    CPPUNIT_TEST(check_value);
    CPPUNIT_TEST_SUITE_END();

    public:
        void check_value();
};

CPPUNIT_TEST_SUITE_REGISTRATION(TestTested);

void TestTested::check_value() {
    tested t(3);
    int expected_val = t.getValue();
    CPPUNIT_ASSERT_EQUAL(7, expected_val);
}

testing.cppファイルをコンパイルしようとすると、次のようになりますundefined reference to。まあ、これは main (プログラムのエントリ ポイント) がないからです。そのため、コンパイラはコードの実行を開始する方法を知りません。

しかし、私には明確ではないのは、 でコードを実行する方法ですtesting.cpp。追加しようとしました:

int main() {
        TestTested t();
        return 1;
}

ただし、何も出力しません (また、3 は 7 に等しくないため、エラー メッセージが返されることが予想されます)。

単体テストを実行する正しい方法を知っている人はいますか?

4

1 に答える 1

2

あなたは cppunit テストを書いているのですから、なぜ cppunit doc を見てみませんか? ( http://cppunit.sourceforge.net/doc/lastest/cppunit_cookbook.html )

メインは次のように書く必要があることを示しています。

#include <cppunit/ui/text/TestRunner.h>
#include "ExampleTestCase.h"
#include "ComplexNumberTest.h"

int main( int argc, char **argv) {
  CppUnit::TextUi::TestRunner runner;
  runner.addTest( ExampleTestCase::suite() );
  runner.addTest( ComplexNumberTest::suite() );
  runner.run();
  return 0;
} 
于 2013-04-18T09:11:29.430 に答える