1

まず、次のようなテストを設定する場合に使用するクラスは何ですか。

class MyClassTests 
    setup()
    teardown()
    testDoingSomething()
    testDoingA()

使用するクラスはTestSuiteのようですか?


だから今、私は非常に単純なクラスを作成しました:

# ParserUnitTests.h
#include <cppunit\TestFixture.h>;
#include <cppunit\extensions\HelperMacros.h>

class ParserUnitTests : public CppUnit::TestFixture {

public:
    void testCanDoUnitTest();
};

そしてそれに対応するcpp:

#include "ParserUnitTests.h"

CPPUNIT_TEST_SUITE(ParserUnitTests);

void ParserUnitTests::testCanDoUnitTest() {
    CPPUNIT_ASSERT_EQUAL(1, 2, "Expected failure");
}

CPPUNIT_TEST(ParserUnitTests::testCanDoUnitTest);

行に「期待される宣言」のようなエラーが表示さCPPUNIT_TEST_SUITEれます...私が生まれた場所とは非常に異なっているようです...より現代的な言語...JS/ Pythonのように...ここではより明確に見えますか?どのクラス/テストケースを実行するかをCppUnitに指示する必要がありますか?わかりましたが、エラーの原因は何ですか?

CppUnitクックブックのコードは主にスニップルであり、必要なインポートとは何か、どこに行くべきかを理解するのは困難です...おそらく誰かが私を導くことができますか?

4

2 に答える 2

2

いくつかの小さな変更により、コードが機能するはずです。

// ParserUnitTests.h
#include <cppunit\TestFixture.h>;
#include <cppunit\extensions\HelperMacros.h>

class ParserUnitTests : public CppUnit::TestFixture {

    CPPUNIT_TEST_SUITE(ParserUnitTest);
    CPPUNIT_TEST(testCanDoUnitTest);
    CPPUNIT_TEST_SUITE_END();

public:
    void testCanDoUnitTest();
};

CPPUNIT_TEST_SUITE_REGISTRATION( ParserUnitTest );

// ParserUnitTests.cpp
#include "ParserUnitTests.h"

void ParserUnitTests::testCanDoUnitTest() {
    CPPUNIT_ASSERT_EQUAL(1, 2, "Expected failure");
}

次に、メインのみが必要です(Cppunitクックブックからコピーしたものです)

// main.cpp
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>

int main()
{
    CppUnit::TextUi::TestRunner runner;
    CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry();
    runner.addTest( registry.makeTest() );
    bool wasSuccessful = runner.run();
    return !wasSuccessful;
}

したがって、唯一の変更点は、TestFixture 宣言内のヘッダー ファイルでテスト スイートを宣言する必要があることです。

于 2012-11-03T21:39:11.053 に答える
1

これは私が CppUnit を使用する方法です:

#include "MyClass.hpp"

struct callable
{
  void operator()()
  {
  }
};

class MyClassTest : public CppUnit::TestCase
{
public:
  void testEquality()
  {
    CPPUNIT_ASSERT(1 == 1);
  }

  void testCreation()
  {
    MyClass<callable>* tp = new MyClass<callable>(1);
    CPPUNIT_ASSERT(tp->done() == true);
    delete tp;
  }

  static CppUnit::Test* suite()
  {
    CppUnit::TestSuite* suiteOfTests = new CppUnit::TestSuite("MyClassTest");
    suiteOfTests->addTest(new CppUnit::TestCaller<MyClassTest>("testEquality",
                                              &ThreadPoolTest::testEquality));
    return suiteOfTests;
  }
};

と :

#include <cstdlib>
#include <iostream>
#include <limits>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/XmlOutputter.h>
#include <cppunit/TextOutputter.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>

#include "MyClass.hpp"

int main(int argc, char** argv)
{
  CppUnit::TextUi::TestRunner   runner;

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

  runner.run();

  return (EXIT_SUCCESS);
}

いくつかのコードがメインにありませんが、重要なビットを確認できるように単純化しました。お役に立てれば。

于 2012-11-03T16:19:48.683 に答える