スポンサーリンク

CppUnitはC++用のテスティングフレームワーククラスライブラリで、ユニットテストを行うことができます。
C++やCの単体テストを自動化し、簡単に何度もテストすることができます。

FreeBSDはportsからcppunitをインストールできます。

cd /usr/ports/devel/cppunit/
sudo make install clean


kcrypt.h
テストしたいソースコード。

#ifndef KCRYPT_H
#  define KCRYPT_H

#include <exception>
#include <stdexcept>
#include <string>
using namespace std;

class kcrypt
{
private:
	void isEmpty (const string str, const string name) {
		if (str.empty () ) {
			throw invalid_argument (name + " is empty.");
		}
	}
public:
	kcrypt () {}
	~kcrypt () {}
	void encrypt (const string secret, const string data, string &compute) {
		this->isEmpty (secret, "secret");
		this->isEmpty (data, "data");
		compute = "fake";
	}
};

#endif /* KCRYPT_H */

test.h
テスト用コード
#ifndef TEST_H
#  define TEST_H
#include <cppunit/TestCase.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/ui/text/TestRunner.h>

#include "kcrypt.h"

class kcryptTest : public CppUnit::TestFixture {

	CPPUNIT_TEST_SUITE ( kcryptTest );
	CPPUNIT_TEST ( test_encrypt_data );
	CPPUNIT_TEST ( test_encrypt_secret );
	CPPUNIT_TEST_SUITE_END ();
public:
	void test_encrypt_secret ();
	void test_encrypt_data ();

	void setUp () {
		target = new kcrypt;
	}
	void tearDown () {
		delete target;
	}

	void runTest () {
	}
private:
	kcrypt *target;
};

#endif /* TEST_H */

main.cc
テストコード本体
#include <iostream>
#include <cstdlib>

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

int
main (int argc, char *argv[])
{
	CppUnit::TestSuite *suite = kcryptTest::suite ();
	CppUnit::TextUi::TestRunner runner;
	runner.addTest (suite);
	bool retcode = runner.run ();
	return (! retcode);
}

testKcrypt.cc
#include <iostream>
#include <cstdlib>
#include "test.h"
using namespace std;

void
kcryptTest::test_encrypt_secret ()
{
	try {
		string compute;
		target->encrypt ("", "data", compute);
		CPPUNIT_FAIL ("The exception std::invalid_argument must be throw." );
	} catch (invalid_argument &e) {
		CPPUNIT_ASSERT (true);
	}
}
void
kcryptTest::test_encrypt_data ()
{
	try {
		string compute;
		target->encrypt ("secret", "", compute);
		CPPUNIT_FAIL ("The exception std::invalid_argument must be throw." );
	} catch (invalid_argument &e) {
		CPPUNIT_ASSERT (true);
	}
}

コンパイル方法

g++ -I/usr/local/include -L/usr/local/lib -lcppunit main.cc testKcrypt.cc


でもいいけど、 cppunikt-configを使った方がいいかも。

g++ `cppunit-config --cflags` `cppunit-config --libs` main.cc testKcrypt.cc


問題ないときの実行例

% ./a.out
..


OK (2 tests)

問題があるときの実行例

throwすべきときにしないときのエラーの例。

..F


!!!FAILURES!!!
Test Results:
Run:  2   Failures: 1   Errors: 0


1) test: kcryptTest::test_encrypt_secret (F) line: 14 testKcrypt.cc
forced failure
- The exception std::invalid_argument must be throw.


参照しているページ (サイト内): [2007-04-13-1] [2007-04-12-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー