FUKUDA Fumiki
ffuku****@ntes*****
2002年 7月 10日 (水) 13:12:56 JST
επιστημηです。 --- "[Cuppa-users:92] Re: テストデータを外から食わす" / FUKUDA Fumiki / 2002/07/09 14:26:05 +0900 --- >こんなの見つけた: http://jtestcase.sourceforge.net/ こいつは XML で書かれた入力値と期待値の集合を読み込んで ちょっとしたテスト用データベース JTestCase に登録/参照しています。 http://jtestcase.sourceforge.net/javadocs/index.html で、これとコンパチな CppTestCase ちうのをこさえてます。 これを使うと、こんなテストが書けます: /* CalculatorTest.cpp * CUPPAディレクティブは抜いてある */ #include "Calculator.h" #include "CppTestCase.h" #include <cppunit/extensions/HelperMacros.h> #include <cppunit/TestAssert.h> class CalculatorTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(CalculatorTest); CPPUNIT_TEST(testCalculate); CPPUNIT_TEST_SUITE_END(); private: CppTestCase* tc_; static int atoi(const std::string& str) { int result; std::istringstream strm(str); strm >> result; return result; } public: virtual void setUp() { // CppTestCase のセットアップ tc_ = new CppTestCase("testcase.xml", "CalculatorTest"); } virtual void tearDown() { delete tc_; } void testCalculate() { std::string testMethod = "testCalculate"; CppTestCase::names_type testCases = tc_->getNameOfTestCases(testMethod); // 全テストケースに対し... for ( CppTestCase::names_type::size_type i = 0; i < testCases.size(); ++i ) { std::string testCase = testCases[i]; // 入力パラメータを取得 CppTestCase::params_type params = tc_->getTestCaseParams(testMethod, testCase); int x = atoi(params["var1"]); int y = atoi(params["var2"]); char op = params["opt"][0]; // テスト対象をコール Calculator c; int result = c.calculate(x,y,op); // 期待値を取得 CppTestCase::asserts_type asserts = tc_->getAssertValues(testMethod,testCase); int expected = atoi(asserts["result"]); // 一致したか? CPPUNIT_ASSERT_EQUAL(expected, result); } } }; CPPUNIT_TEST_SUITE_REGISTRATION(CalculatorTest); α版が完成しました。CppUnit-1.9.8とXerces-1.7.0 が必要です。 例によって欲しい人にあげる。メールにてご一報を。 # Xercesは重いので、将来的には'なんちゃってSOX版'や'MiX版'も考えてます。 -----:-----:-----:-----:-----:-----:-----:-----:-----:----- FUKUDA (episteme) Fumiki -- magical, but never a magic...