Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

TDD

shellでTDDするshunit2 その6:内部定数

TDD

shunit2にはテストを円滑にすすめるための内部定数がいくつか用意されています。 実際のところ SHUNIT_TRUE Standard shell true value (the integer value 0). SHUNIT_FALSE Standard shell false value (the integer value 1). SHUNIT_ERROR The integer v…

shellでTDDするshunit2 その5:Table Driven Testで似たテストを自動化

Table Driven Testをつかうと、似たデータのテストをブン回すときに便利です。 実際のところ ヒアドキュメントで while read desc arg want; do got=$(fn ${arg}) rtrn=$? assertTrue "${desc}: fn() unexpected error; return ${rtrn}" ${rtrn} assertEqual…

shellでTDDするshunit2 その4:初期設定と破壊

shellでTDDするshunit2のお話。 今回はTDDフレームワークで欠かせないものの一つ、テストの前と後の値設定です。 実際のところ oneTimeSetUp/setUp 存在する場合テスト前に呼び出され、そのテストで使用する一時環境変数を設定します。 前者は呼び出されたら…

shellでTDDするshunit2 その3:つかえるAsserts

TDD

実際のところ assertEquals [message] expected actual expectedとactualを比較し、同じなら正を返す。 要は普段使いのコマンド。別表現として"assertSame [message] expected actual"という記法もあり。 個人的には、どちらかに限定して置いた方があとあと…

shellでTDDするshunit2 その2:Red/Greenをブン回す

前回に続いてshunit2のお話。 今回はいよいよRed/Greenテストの開始です。 実際のところ つかってみる ではまず失敗するファイルをつくりましょう #! /bin/sh myFunc() { echo 0 } testEquality() { value=`myFunc` assertEquals 1 "$value" } # Load shUnit…

shellでTDDするshunit2 その1:とりあえず導入

シェルコマンド は思いついた事をすぐ実装できる手軽さ、移植性が高いなどのメリットがある反面、 多人数開発という観点ではあまり嬉しくない状況がありました。そんなお困りごとはTDDで解決! 一時ほど聞かなくなりましたが、それでもテストの重要性は今尚…

Valgrindをつかってメモリ破壊してないかチェックする

実際のところ まずは公式チュートリアル通りの以下のスクリプトをやってみましょう。 (コメントは日本語してみました) #include <stdlib.h> void f(void) { int* x = malloc(10 * sizeof(int)); x[10] = 0; // 問題その1: ヒープ領域ぶっちぎってる } // 問題その2: </stdlib.h>…

Magnum CIでBitbucketの非公開リポジトリをビルドしてみる

Magnum CIはBitbucketの非公開リポジトリでも無料でビルドできてしまう凄いCIツールです。 (記事執筆現在)サインアップすると、次のような画面がでます。 リポジトリを設定 butbucketの設定 hook ssh githubなら、毎度お馴染みのアレで 新規の鍵を追加して M…

step内で別のstepを呼び出す

step内で別のstepを呼び出す事が可能です。前回の記事も、 step 'トップを表示' do Capybara.app_host = "http://localhost:3000" end step 'ユーザの情報を入力' do visit '/users/sign_in' fill_in 'user_login', with: name fill_in 'user_password', wit…

WITHINでブレる値も扱う(Unity系TDDツール)

TDD C

組込み機器といえば、センサーですね。 温度センサーで水温測ったり、加速度で転倒検知したり。 ところが、こういうモノは値ブレブレで一意に定まりません。 ここで活躍するのがWITHIN構文です。 TEST_ASSERT_INT_WITHIN(delta, expected, actual); これは、…

【Unity系TDD】TEST_ASSERT_EQUALは便利でもなるだけ使わない。

C TDD

TEST_ASSERT_EQUALはINT型の計算結果を返します。 公式ドキュメントによればTEST_ASSERT_EQUAL_INTと同じ意味合いらしいです。 ……というわけで #define END_FLAG 0b11111111 int8_t result = END_FLAG; というコードに対して TEST_ASSERT_EQUAL(END_FLAG, re…

CeedlingでUnityを更に便利にする(その3)

C TDD

今回はCeedlingのコマンドに関してです。 とりあえずは、全部テストの rake test:allとビルド内容をクリアする rake cleanさえ使えれば大丈夫です。 それに加えて以下のコマンドを使えると更に捗ります。 verbosity rake verbosity[0] test:allといった感じ…

CeedlingでUnityを更に便利にする(その1)

C TDD

以前の記事で紹介したTDDフレームワークUnityですが、 それの強化発展版としてCeedlingというものがあります。 Sinatraにとってのpadrinoみたいなものですね。 前提 Ruby / Rack が動作する環境 gcc系のC/C++コンパイラ 手順 $ gem install ceedlingで導入完…

UnityでC言語でもTDDを試す

C TDD

奥さん、僕ぁC言語でもTDDしたいんですよ! ……というわけで、Rubyで実現する素敵なC言語TDD環境、Unityです。 3Dゲームを作るアレではなく、TDD用テストフレームワークです。 UnityはRubyistにはお馴染みのRackを使っています。 Ruby&Rack環境が方は先に導入…