WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート 2009年07月

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

VisualC++を使っていて何かのショートカットを押してしまったらしくタブが「→」にスペースが「・」になってしまった。
vcpp.jpg
見づらいです。直すには
編集>詳細>スペースの表示
です。ショートカットはCtrl+RとCtrl+Wを連続で押します。
二つの組み合わせを連続で押すショートカットなんてはじめて見ました。しかも、自分が間違えてそれを押したなんて・・・

    このエントリーをはてなブックマークに追加

JUnitやPHPUnitと同じような単体テストのフレームワークCppUnit。これが元祖なのかな?Javaかな?まあ、それはいいとして、無料のVisual C++ 2008 ExpressEdition(以下VC++ee)でビルドしてみました。この辺が参考になります。

まずダウンロードします。解凍し適当な場所に置いたらcppunit\src\CppUnitLibraries.dswをVC++eeで開きます。古いバージョン用のプロジェクトなので変換のダイアログが出ますので「すべてはい」を押して変換します。こんな感じのソリューションが読み込まれると思います。
solution.jpg

ビルドします。
ビルドメニューからバッチビルドを選択してcppunitのDebugとReleaseにチェックを入れビルドします。
build.jpg

ビルドが終了したら、ここでいったんこのソリューションを閉じます。そして新規にプロジェクトを作成します。とりあえず最小のテストをするということでWin32コンソールアプリケーション>空のプロジェクトを作成しましょう。

このプロジェクトがcppunitのヘッダーファイルと先ほどビルドしたライブラリを読めるようにしなければなりません。まずヘッダーファイルへのインクルードパスを通します。プロジェクト毎に追加もできますが良く使うと思われるので今回は全プロジェクトで読めるようにしてしまいましょう。
ツール>オプション
を開いてcppunit\includeをインクルードパスに追加します。
include.jpgこのままこのダイアログでライブラリフォルダも追加できます。右のプルダウンをライブラリファイルに切り替えてインクルードの時と同じような感じでcppunit\libを追加します。

後もうひとつ、リンカにライブラリを追加しないといけません。ソリューションウィンドウから先ほど作成したプロジェクトを右クリックしプロパティを出します。
リンカ>入力を選択し追加の依存ファイルにcppunitd.libを指定します。
link.jpg

これで準備は完了です。あとはテスト用のクラスとmain関数を作ってやれば動きます。
FirstTest.h


#include

class FirstTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE( FirstTest );
CPPUNIT_TEST( testFirst );
CPPUNIT_TEST_SUITE_END();

public:
void setUp();
void tearDown();
void testFirst();
};

CPPUNIT_TEST_SUITE_REGISTRATION( MoneyTest );


void MoneyTest::setUp(){ }

void MoneyTest::tearDown(){ }

void MoneyTest::testFirst()
{
CPPUNIT_ASSERT_EQUAL( 100, 100 );
}
main.cpp

#include
#include
#include
#include

int main(int argc, char* argv[])
{
CppUnit::TextUi::TestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(), std::cerr ) );
bool wasSucessful = runner.run();

return wasSucessful ? 0 : 1;
}
Win32APIのアプリの場合どうするのでしょうか?・・・近々アップします。





    このエントリーをはてなブックマークに追加

細野真宏の数学嫌いでも「数学的思考力」が飛躍的に身に付く本!細野真宏の数学嫌いでも「数学的思考力」が飛躍的に身に付く本!
(2008/09/01)
細野 真宏

商品詳細を見る
論理的に物事を説明する、色々な事の先が読めるようになる。この本に載ってるようなことは普段からやってることだと思うのですが、言葉で細かく説明してもらうと確認・納得できます。「自分の話が度々理解してもらえないのは、自分が頭が良くて、相手が馬鹿だからだ」と思ってる人にも、逆の人にもお勧めできます。

    このエントリーをはてなブックマークに追加

7つの習慣 ティーンズ7つの習慣 ティーンズ
(2002/05)
ショーン コヴィー

商品詳細を見る
まだ成功したわけじゃないですが人生の転機になった本です。
本当はお父さんの書いた500ページくらいの本家が良いのですが、こっちの方が気楽にさっと要点を読めます。一部ティーンエイジャー向けの内容もありますが7つの習慣の本質が短時間で習得できると思います。ちょっと恥ずかしいので電車の中では表紙付きのまま読みましたが・・・

    このエントリーをはてなブックマークに追加

最近アジャイル開発の勉強をしていて、テストファーストを実践してみたらとてつもなく開発しやすく、はまってます。PHPではPHPUnitというテスティングフレームワークがあって、定番のようなのでそれを使ってみました。

PHPUnitで全てのテスト終了時に使用メモリ(あんまり当てにならないけど)とミリ秒単位までの実行時間(デフォルトで秒数は出ます)を表示したくて色々いじってみたのですがなかなかうまくいかなかったので書いておきます。

PHPUnitではPHPUnit_Framework_TestSuiteのなかに複数のテストを登録して連続実行できます。これはCompositeパターンになっていて入れ子にできます。一番端の葉の部分がPHPUnit_Framework_TestCaseでそこに実際のテストコードを書きます。

ベンチを取るには一番最初と一番最後に処理を挿入する必要があるのでPHPUnit_Framework_TestSuiteを拡張したいのですが、デフォルトのコマンドラインからの実行


phpunit --colors TestName
ではPHPUnit_Framework_TestSuiteの代替クラスを指定できないようです。

最初に入れるのは簡単ですが、最後に何かを実行するのが困りました。コマンドを実装するのも考えましたが、デフォルトのコマンドラインからのテストでは、テスト終了時はexitで抜けてるのでregister_shutdown_functionを使えば簡単に最後に処理を入れることができました。


class Sdx_Test_Case extends PHPUnit_Framework_TestCase
{
/**
* @var Sd_Util_Bench
*/
protected static $_bench;
protected function setUp()
{
if(empty(self::$_bench))
{
self::$_bench = new Sd_Util_Bench();
register_shutdown_function(array($this, 'echoBench'));
}
}

public function echoBench()
{
echo 'Memory: '.self::$_bench->getMemory().PHP_EOL;
echo 'Time: '.self::$_bench->getTime().PHP_EOL;
}
}
include pathの設定や細かいところは省略してます。最初のテストがnewされる時に秒数のカウントが始まりスクリプト終了時に出力します。Sd_Util_Benchは独自クラスですが詳細は省略します。new時に現在時刻のミリ秒タイムスタンプを記録しておいて、最後にまた引いてるだけです。

テストをnewするたびにifが評価されるので実装としてはスマートではありませんが、この秒数は相対的に見ることが殆どだと思いますので、目を瞑ることにしました。

なんかもっと良い方法があったらコメントお願いします。そもそもPHPUnit_Framework_TestSuiteをさくっと取り替えればもっとスマートにいけそうです。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。