Edited at

テストの書き方


この記事は誰向け?

知り合いがテストを書いたことがないけど、書きたいと言っていたときにまとめたものを記事にしました。

すなわち、テストコードを初めて書くという人に向けた記事です。


テストの書き方

3つのゾーンがあります。


  • 事前状態

  • 実行

  • 検証

具体的にはこんな感じ。phpunitで書きます。

/**

* @test
*/
public funtion ユーザが作成されたとき、statusが初期値となること()
{
// 事前状態
$user = new User();
// 実行
$actual = $user->getStatus();
// 検証
$this->assertSame('init', $actual);
}

phpunitでは事前状態をsetUpメソッドにくくりだします。

少しシンプルに書けますね。

public function setUp()

{
// 事前状態
$this->user = new User();
}

/**
* @test
*/
public funtion ユーザが作成されたとき、statusが初期値となること()
{
// 実行 & 検証
$this->assertSame('init', $this->user->getStatus());
}

rspecではこんな感じ

describe 'ユーザが作成されたとき'

before do
@user = Factory.create(:user)
end

it '初期値であること'
expect(@user.status).to eq 'init'
end

unit系ではsetUpにspec系ではbeforeに事前状態を括りだすことができます。

unit系では

テストクラス : 事前状態 = 1 : 1

テストクラス : テストケース = 1 : n

spec系では

プロダクトクラス : テストクラス = 1 : 1

テストクラス : 事前状態 = 1 : n

テストクラス : テストケース = 1 : n

になることが多いんじゃないかなぁ。

テストの粒度で見ると、

単体テスト

1テストケース : 1アサーション(1実行 : 1検証)

機能テスト

1テストケース : nアサーション(1実行 : n検証)

になるかなぁ。


この記事のライセンス



この記事はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際 ライセンス)の元で公開します。