dreamin' blog

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 国際 ライセンス)の元で公開します。