Author:hkfyp
技術記です。
おすすめ:
スポンサーサイト --.--.--
XAMPP×MediaWiki×OpenPne×Trac 2009.09.21
MySQLの管理が楽なのでXAMPPを入れる事に。
以下、時系列に。
・XAMPP、最新版の1.7.2を入れる。
http://www.apachefriends.org/jp/xampp-windows.html
・MediaWiki 1.16をSVNから入れてみるが失敗。1.15をインストール。
http://svn.wikimedia.org/svnroot/mediawiki/branches/REL1_15/phase3
って、1.16じゃなくて、1.6入れようとして古いからエラー出たんじゃね・・・?
その他もろもろ、プラグインを設定。
・OpenPNE3をインストールしようとする
最近流行ってるらしい、symfonyというフレームワークのインストールにてこずる。
なんとか入るも、パスがおかしいのかうまくいかない・・・。
一日悩んだ末、あきらめる。
・OpenPNE2.14.1.1に変更
http://labs.zsrv.net/blog/52/21
インストールできた!
かに見えたが、セットアップページから進まない。。。
・これか・・・
> PC逝ったこともあって、丁度すっからかんの状態でxampp1.7を入れた。
> そしたら何か動作が変だ。
> 調査めんどかったので、とりあえずバージョンを1.68に落としてやった。
http://ameblo.jp/php-ruby/entry-10200561692.html
他のページにもそんな感じの出てきたし・・・。
・xamppを1.68に←今ここ
超めんどらあああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
iPhoneアプリ開発環境セットアップ 2009.07.25
MacをゲットしたのでiPhoneアプリの開発環境をセッティングしながらメモ書き。参考URL:
http://gihyo.jp/dev/serial/01/iphone
http://core.atmarkit.co.jp/keyword/iphone.html
*iPhoneSDKのインストール
iPhoneSDKの取得はアカウントを作成してログインしないとSDKをダウンロードできないもよう。
登録&DL・・・
ダウンロード完了。
「dmgパッケージなので、マウントしてインストーラーを実行しましょう。」
Macに慣れていないので全く意味がわからない・・・
あらなるほど。mpkgをダブルクリックでいいのか。
って、初期設定で拡張子表示されてないから記事の画像がなかったらわからんかった。
インストール後、とりあえずこれにしたがって動かしてみる。
http://gihyo.jp/dev/serial/01/iphone/0002?page=2
おおおおおおおおおお!!
シミュレーターすげー!
iPhoneの画面と操作そっくりでシミュレーションができる。
ついでにSafariとか、写真とかも開けるし、実機じゃなくてもかなりいろいろできそう。
よし、とりあえず環境セットアップ無事完了。
開発環境まとめ 2009.07.05
GoogleTestの訳の続きを書かなきゃって思っていたら全然やる気が起きず更新しなくなってしまった・・・。ここは一旦違う事をさくっと書こう。
やりたい事のまとめ
ゲーム開発環境
・VC++2005 Express Edition
・ゲームプログラマになる前に覚えておきたい技術 Finalライブラリ
・Hudson
自動ビルド、自動テスト、パッケージング
・Trac
バグトラック、タスク管理
・GoogleTest
テスト
これプラスiPhoneアプリの並行開発にも手を出したいなぁ
GoogleTestがかなりいけてる その2 2009.05.19
【GoogleTest Assertions まとめ】
↓のWikiから、Assertionを和約(適当)してまとめてみる。
http://code.google.com/p/googletest/wiki/GoogleTestPrimer
http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide
注)勢いで書いたので、自分に都合の良い所だけ抽出、意訳しています。
あと、実はバージョン1.2.0の時に訳したもののコピペです。
基本
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_TRUE(condition); | EXPECT_TRUE(condition); | condition is true |
| ASSERT_FALSE(condition); | EXPECT_FALSE(condition); | condition is false |
Fatal assertion(ASSERT_HOGE) と Nonfatal assertion(EXPECT_HOGE)
- ASSERTの場合は、その関数から抜ける(returnする)
- EXPECTの場合は、そのまま処理を続ける
値比較
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_EQ(expected, actual); | EXPECT_EQ(expected, actual); | expected == actual |
| ASSERT_NE(val1, val2); | EXPECT_NE(val1, val2); | val1 != val2 |
| ASSERT_LT(val1, val2); | EXPECT_LT(val1, val2); | val1 < val2 |
| ASSERT_LE(val1, val2); | EXPECT_LE(val1, val2); | val1 <= val2 |
| ASSERT_GT(val1, val2); | EXPECT_GT(val1, val2); | val1 > val2 |
| ASSERT_GE(val1, val2); | EXPECT_GE(val1, val2); | val1 >= val2 |
- 失敗したらGoogleTestが自動的にval1とval2の値を出力してくれます。
- <<を使う事もできます。
- ASSERT_EQ()はポインタ比較するので、Cの文字列(const char*とか)の中身を比較したい時はASSERT_STREQ()を使って下さい。
- 文字列のNULLはASSERT_STREQ(NULL, c_string)でチェックできます。
- string同士を比較する時は、ASSERT_EQを使って下さい。
文字列比較
- このアサーションはCの文字列を比較します。
- stringを比較したい場合は、EXPECT_EQ, EXPECT_NEなどを代わりに使って下さい。
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_STREQ(expected_str, actual_str); | EXPECT_STREQ(expected_str, actual_str); | the two C strings have the same content |
| ASSERT_STRNE(str1, str2); | EXPECT_STRNE(str1, str2); | the two C strings have different content |
| ASSERT_STRCASEEQ(expected_str, actual_str); | EXPECT_STRCASEEQ(expected_str, actual_str); | the two C strings have the same content, ignoring case |
| ASSERT_STRCASENE(str1, str2); | EXPECT_STRCASENE(str1, str2); | the two C strings have different content, ignoring case |
- wchar_t*は比較できます。(比較が失敗した場合、UTF-8のnarrow stringで出力されます)
- NULLポインタと空の文字列は別です。
Test Fixtures: Using the Same Data Configuration for Multiple Tests
- 同じ様なテストをいろんなところでやりたい場合、それをFixtureとして作成できます。
- 作り方は簡単。testing::test を継承したクラスを作成するだけ。
- Fixtureを使う時は、TEST()の代わりにTEST_F()を使うだけ。ここで、TEST_F()の第一引数にはFixtureの名前を入れます。
- C++のマクロの仕様のせいで2つの種類のテストを1つのマクロで扱う事ができません。ちっくしょう。
Explicit Success and Failure
| SUCCEED(); | FAIL(); | ADD_FAILURE(); |
で直接成功や失敗を呼ぶ事ができます。
Failが致命的なエラーで、ADD_FAILUREが致命的でないエラーです。
例外アサーション
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_THROW(statement, exception_type); | EXPECT_THROW(statement, exception_type); | statement throws an exception of the given type |
ASSERT_ANY_THROW(statement); | EXPECT_ANY_THROW(statement); | statement throws an exception of any type |
ASSERT_NO_THROW(statement); | EXPECT_NO_THROW(statement); | statement doesn't throw any exception |
- statementに渡した関数が例外を投げるかどうかなど
述語(Predicate)アサーション
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_PRED1(pred1, val1); | EXPECT_PRED1(pred1, val1); | pred1(val1) returns true |
| ASSERT_PRED2(pred2, val1, val2); | EXPECT_PRED2(pred2, val1, val2); | pred2(val1, val2) returns true |
| ... | ... | ... |
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_PRED_FORMAT1(pred_format1, val1);` | EXPECT_PRED_FORMAT1(pred_format1, val1); | pred_format1(val1) is successful |
| ASSERT_PRED_FORMAT2(pred_format2, val1, val2); | EXPECT_PRED_FORMAT2(pred_format2, val1, val2); | pred_format2(val1, val2) is successful |
| ... | ... |
- 自分でアサーションを作る場合かな?
浮動小数点比較
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_FLOAT_EQ(expected, actual); | EXPECT_FLOAT_EQ(expected, actual); | the two float values are almost equal |
| ASSERT_DOUBLE_EQ(expected, actual); | EXPECT_DOUBLE_EQ(expected, actual); | the two double values are almost equal |
- 4 ULP 以内はおおむねイコール。
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_NEAR(val1, val2, abs_error); | EXPECT_NEAR(val1, val2, abs_error); | the difference between val1 and val2 doesn't exceed the given absolute error |
- Floating-Point Predicate-Format Functions
- EXPECT_PRED_FORMAT2みたいなやつがある
Windows HRESULT assertions
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_HRESULT_SUCCEEDED(expression); | EXPECT_HRESULT_SUCCEEDED(expression); | expression is a success HRESULT |
| ASSERT_HRESULT_FAILED(expression); | EXPECT_HRESULT_FAILED(expression); | expression is a failure HRESULT |
Type Assertions
- StaticAssertTypeEqで型チェック。
- バージョン1.3.0から入ります。
Death Tests
- エラーをあえて起こして失敗を確認できる。
- バージョン1.3.0から使える様になっています!
Using Assertions in Sub-routines
- SCOPED_TRACE(message);
- スコープが効いている所でエラーが出たら、messageをつけて出力してくれます。
サブルーチンでのアサーション
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_NO_FATAL_FAILURE(statement); | EXPECT_NO_FATAL_FAILURE(statement); | statement doesn't generate any new fatal failures in the current thread. |
- statementの中でエラーが起こったかどうか
致命的なエラーの検出
- HasFatalFailure() で現在のテストに致命的なエラーがあるか調べる事ができます。
ログへの追加情報
- RecordProperty("key", value) で追加できます。
- アプリの実行経過のログ取りに使えますね。
複数のテストケース間でのリソースの共有
- まず、テストfixtureでstaticな変数を定義します。
- 次に、static void SetUpTestCase()とstatic void TearDownTestCase()を共有のセットアップとティアーダウンとして定義します。
- (公式Wikiではprotectedで宣言してるけど、publicじゃないと通らない?)
Global Set-Up and Tear-Down
- 全体で使用するセットアップとティアーダウンです。
- testing::Environment クラスのサブクラスを定義して、そこのSetUpとTearDownを実装します。
class Environment {
public:
virtual ~Environment() {}
// Override this to define how to set up the environment.
virtual void SetUp() {}
// Override this to define how to tear down the environment.
virtual void TearDown() {}};- 以下を定義しておしまい。
Environment* AddGlobalTestEnvironment(Environment* env);
値の範囲テスト
- 値の範囲テストを簡単に書く方法を教えてあげよう。
- まず、testing::TestWithParam<T>を継承した fixture クラスを作る。(Tはパラメータの型:Tはコピー可能な型ならなんでもいい。ポインタ値のライフスパンを管理したい場合、生のポインタを入れる事もできる)
- 次に、TEST-Pマクロを使いたいテストパターンの数だけ定義する。
- 最後に、INSTANTIATE_TEST_CASE_Pを使って、チェックしたい値の範囲をテストケースにセットする。
- あとはGoogleTestが勝手にテストパラメータを入れた関数群を作ってくれるよ!これをparameter generators って呼んでるんだ。すごいでしょ!!まじすごい!!びっくりした!!!
| Range(begin, end[, step]) | Yields values {begin, begin+step, begin+step+step, ...}. The values do not include end. step defaults to 1. |
| Values(v1, v2, ..., vN) | Yields values {v1, v2, ..., vN}. |
| ValuesIn(container) and ValuesIn(begin, end) | Yields values from a C-style array, an STL-style container, or an iterator range [begin, end). |
| Bool() | Yields sequence {false, true}. |
| Combine(g1, g2, ..., gN) | Yields all combinations (the Cartesian product for the math savvy) of the values generated by the N generators. This is only available if your system provides the <tr1/tuple> header. If you are sure your system does, and Google Test disagrees, you can override it by defining GTEST_HAS_TR1_TUPLE=1. See comments in include/gtest/internal/gtest-port.h for more information. |
- 使用例
INSTANTIATE_TEST_CASE_P(InstantiationName, FooTest, testing::Values("meeny", "miny", "moe"));
- --gtest_filterでもなにやらできるらしい。
- ちなみにWindows環境ではVC8.0以上が必要
Typed Tests以下はまた次回・・・
GoogleTestがかなりいけてる その1 2009.05.17
[GoogleTest1.3.0を使ってみた]
Googleのテストフレームワーク「GoogleTest」に去年の年末くらいから興味を持ち始めて使ってみた。
かなりいけてるのに日本語解説が少ないので、やった事をいろいろと書き出す。
まずは導入
なにはともあれ動かしてみる。手順はVCのみ解説。他の環境の人はきっと猛者なのでなんとでもなるだろう。
ちなみに、いろんなVCバージョンで試した気がするが、今回動作確認したのは VC2005 Express Edition。
1.公式サイトのDownloasからダウンロード。(2009/05/16では1.3.0が最新)
http://googletest.googlecode.com/svn/trunk/
で開発中最新リポジトリ
2.gtest-1.3.0 の中に msvc フォルダがあるので開いて、gtest.sln を実行
VisuallStudio変換ウィザードが走るので適当にOK。
3.gtest と gtest_main プロジェクトをビルド
Debug、Release両方で。gtestを最初にビルド。
4.テストしたいプロジェクトにインクルードパスとリンクするライブラリを追加
追加のインクルードディレクトリ → include\gtest
追加の依存ファイル → gtest.lib, gtest_main.lib (Debugならgtestd.lib,gtest_maind.lib)
5.mainとかに以下の2行を追記
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
6.どこかにテストコードを書く(勝手に見つけてくれる)
#include <gtest/gtest.h>
TEST(firstTest, abs)
{
EXPECT_EQ(1, abs( -1 ));
EXPECT_EQ(1, abs( 1 ));
}
7. ビルド→実行でおしまい!
イカス!!!




