title: テストの書き方
tags: PHPUnit RSpec
author: koheiSG
slide: false
この記事は誰向け?
知り合いがテストを書いたことがないけど、書きたいと言っていたときにまとめたものを記事にしました。
すなわち、テストコードを初めて書くという人に向けた記事です。
テストの書き方
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 国際 ライセンス)の元で公開します。