2012年9月12日水曜日

Visual Studio 2012: C++ Unit Test Framework で iutest を使う(値のパラメータ化テストに対応)

Visual Studio 11 : C++ Unit Test Framework で Google Test を使ってみた(実験) の続きです。

以前、できなかったことが少しだけできるようになりました。
ただし、今回は iutest のみ対応がほとんどです。(gtest 対応はいずれ…)

テストフィクスチャの使用
TEST マクロに加えて TEST_F も使用できるようになりました。
ただし、SetUpTestCase/TearDownTestCase に対応していません。


~~~ ここから iutest のみの対応 ~~~
ログ出力対応
iutest のログ出力を Visutal Studio の出力ウィンドウに出すようにしました。

値のパラメータ化テスト対応
値のパラメータ化テスト(IUTEST_P)に対応しました。
いくつか制限がありますが、とりあえずテストできるようにはなりました。

  1. SetUpTestCase/TearDownTestCase 非対応
  2. 1つの TEST_METHOD ですべてのパラメータテストを実行する

このテストが、
// Param Test Range
class TestP : public iutest::TestWithParam<int>
{
protected:
    static int a;
    static int b;
public:
    static void SetUpTestCase(void)
    {
        a = 0;
        b = 0;
    }
};
int TestP::a = 0;
int TestP::b = 0;

IUTEST_INSTANTIATE_TEST_CASE_P(TestPInstance, TestP, iutest::Range<int>(0, 10));

IUTEST_P(TestP, TestA)
{
    IUTEST_ASSERT_EQ(a, GetParam());
    ++a;
}

1つの TEST_METHOD にまとまって




実行されます。




今回はここまで。
IUTEST_P のように強引にやれば、型付けテストもできるんじゃないかなと思ってます。
まぁ、できたから何って感じですが・・・

2012年9月9日日曜日

Jenkins のJNLPスレーブをちょっと便利にする方法

Jenkins で JNLP スレーブを使用していると、たま~に接続が切れたり、
ジョブが実行される度に例外で必ず失敗したり、なんかおかしくなったり…

そんな時は、リモートでスレーブマシンにログインして、スレーブを再起動させるのですが、
このひと手間がメンドイ!ってことで、こんなバッチファイル書いて使ってます。

@echo off

if "x%~1" == "x" (
    @echo スレーブ名を指定してください。
    goto error
)

rem Config
SET SLAVE_NAME=%~1
SET SLAVE_OPTION=-Xmx512m
SET JENKINS_COMPUTER_URL=http://localhost:8080/computer/
SET JNLP_PATH=%JENKINS_COMPUTER_URL%%SLAVE_NAME%/slave-agent.jnlp

:loop
@echo N | start /WAIT /REALTIME "%SLAVE_NAME%" "java" %SLAVE_OPTION% -jar slave.jar -jnlpUrl %JNLP_PATH%
ping localhost > NUL
goto loop

:end
exit /b 0

:error
exit /b 1

第一引数にスレーブ名を指定します。
スレーブを起動して、なんらかの理由でそれが終了した場合、再起動させます。

仕組みとしてはものすごく単純ですが、
これでスレーブが切断されてしまった場合に、勝手に再接続してくれます。

また、Jenkins のスレーブのページから「切断」メニューを押すことで、
スレーブマシンに入ることなくスレーブの再起動ができるようになるオマケ付き!



2012年8月31日金曜日

Jenkins の安定バージョンっていくつ?

これを書いている時点で Jenkins の最新バージョンは 1.479 。
会社で使っている Jenkins のバージョンは 1.472 。

今使っているバージョンで大きな不満はないものの、どことなく不安定な気がしています。
履歴(change log)を見ればどんな修正があったか分かりますし、issue 見れば不具合情報も見れます。

ただ、パッと見てどのバージョンが安定していて、どのバージョンが不安定なのか全然わからない


自宅で使っている Jenkins は最新バージョンを追っかけてますが、1週間に1回起動するかどうかです。
会社と違ってスレーブを使ってないので、安定しているかどうかの判断がしにくいのです。



というわけで、どこかに安定(or おすすめの)バージョンの情報ないですかね?