タグ

mockに関するk-holyのブックマーク (5)

  • 状態ではなく、振る舞いをモックせよ

    TL;DR GOOS『実践テスト駆動開発』で触れられている「ロールをモックせよ」について、違った角度で解説ドメインモデルを豊かにすることでコードがシンプルになる例Mock Behaviors, Not Statesユニットテストを記述する際、テスト対象のオブジェクトが利用しているオブジェクト(依存オブジェクト、隣接オブジェクト)はモックオブジェクトにして、テストしたい状況をテストコード側からコントロールします。しかし、闇雲にモックを使ってテストを記述すれば良いわけではありません。今回は、モックが有効に機能するテストとはどういったものなのかを解説します。 サンプルコード簡単なサンプルで説明します。Extract Till You Dropのモデルと近いものを使います。グループ、メンバー、およびグループリポジトリがあります。グループオブジェクトはインメモリでは所属メンバーの情報を保持しておら

    状態ではなく、振る舞いをモックせよ
    k-holy
    k-holy 2013/11/08
    モック使いすぎて何をテストしてるのか分からなくなる問題への対処法。ユースケースをクラス/メソッド化することでテスト対象を明確に。
  • PHPUnit のスタブの will() で使えるメソッド « nia.note

    PHPUnit ユニットテストを書くときに重宝するPHPUnit。でも、以外と詳しく解説したマニュアルというか、リファレンスが無いというのもちょっと悲しい。 (もしかしたらあるのかもしれないです。あんまり深く探してないので←) 公式の日語訳ドキュメントは存在しますが、どうやらすべての説明が網羅されているわけではないようです。 今回はユニットテストを助ける立役者であるモックオブジェクトを使って、メソッド呼び出しを検査を設定する際の各メソッドの戻り値の指定の仕方について、備忘録的に書きます。長い。 基のおさらい まずは基をおさらいしましょう。 とりあえず簡単なテストケースを書きます。テスト対象のクラスがどのような実装かは察してください。 class Sample_Test extends PHPUnit_Framework_TestCase { public function test_

  • 時計オブジェクト(ドメインクロック)を導入してテスト容易性と意図性を高める

    現在の時刻を扱うロジックがアプリケーションコードに含まれるのは珍しいことではありませんが、これらのロジックのテストは簡単ではありません。以下のコードを見てみましょう。 <?php ... class OrderService { ... public function order(Order $order) { $currentHour = (integer) (new \DateTime())->format('H'); if ($currentHour >= 10 && $currentHour < 21) { ... } else { throw new OrderException('ご注文は午前10時から午後9時まで!'); } } ... 実際の現在の時刻に依存せずにif文の条件をテストする1つの方法は、DataTimeオブジェクトの生成部分をメソッドとして抽出し、そのメソッド

    時計オブジェクト(ドメインクロック)を導入してテスト容易性と意図性を高める
    k-holy
    k-holy 2013/04/05
    時計オブジェクトを導入してテスト容易に。グローバルな設定オブジェクトに日時持ったりしてたけどこの方が綺麗ですね
  • padraic's mockery at master - GitHub

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    padraic's mockery at master - GitHub
  • PHPUnitのモックで設計とリファクタが捗る | 48JIGEN *Reloaded*

    class TwitterClient { public function tweet($message) { return true; } } $hoge = new TwitterClient(); $hoge->tweet('大心なう'); // trueが返る class ClientContainerTest extends PHPUnit_Framework_TestCase { public function test_モックを書いてみる() { $hoge = $this->getMock('TwitterClient', array('tweet')); $hoge->expects($this->any()) ->method('tweet') ->will($this->returnValue(true)); $hoge->tweet('大心なう'); // true

    PHPUnitのモックで設計とリファクタが捗る | 48JIGEN *Reloaded*
  • 1