UnitTest

PHPUnit のモックで、引数に応じて戻り値を変更する #php #PHPUnit

概要 returnValueMap を使うと引数に応じて戻り値を変更できる 例外を返したいときは returnCallback() を使うと便利 returnValueMap を使う returnValue に [引数, 戻り値] の配列を渡すと、引数に応じた戻り値を返す Mock を作れる。 引数が複数ある場合は…

テストコードでのヘルパーとか重複とか

テストコードでのヘルパーとか重複について考えた。 gihyo.jp ちょっと調べたら、少し前のだけれども大御所の人たちの記事を見つけた。 僕もテストコード内のヘルパーや重複にはかなり慎重派。 もちろん見通しのよさや独立性っていう話もあるんだけれども、…

データアクセスのUnitTestについて考える

問題 DBに登録したり、ファイルに書いたり、保存するような処理のテストについて考える。 インターフェースを抽象化すると、下記のような感じになる。 public interface ItemRepository { // itemを保存する void save(Item item); } この場合、saveのユニッ…

kotlin-testで例外のテスト #Kotlin

概要 KotlinのUnitTestはSpekで書いており、Assertion Frameworkはkotlin-testを使ってる。 kotlin-testで例外発生のテストをAssertする。 例外の発生をテストする assertFailsを使えばOK assertFails { someMethod(invalidArg) } 発生した例外の型をテスト…

PostgreSQLを使ったユニットテストをするときに、外部キーを一時的に無効化する

概要 RDBを使ったユニットテストをするときに、前提条件となるテストデータを用意することがある。 しかし外部キーの制約上、テストしたいことと直接関係ないデータの作成が必要になる状況が発生する。 例えば、テーブルが「親-子-孫」という階層になってい…

RSpecよりMiniTestの方が好きだと思ったのはなんでか考えてみた

最近、社内でモブプロの交流会等で、RSpecとMiniTest両方を触る機会があった。 どちらもガッツリ触ったわけではないのだけれど、直感的にMiniTestの方が好きだなぁと感じて、なんでかなぁって考えてみた。 RSpecはこんな感じ。 RSpec.describe Order do it "…

SpockでオーバーロードされたメソッドをMockする #spock #groovy

JavaでオーバーロードされたメソッドをMockしようとしても、うまくMockできないことがある。 どちらのメソッドを呼べばいいかわからないからだと思う。(たぶん) 下記のようなメソッドをMockしたい場合の対応。 public String doSomething(String arg1) pub…

Mockitoでvoidメソッドをゴニョゴニョする

doAnswer を使うと、Mockのvoidメソッドの中でゴニョゴニョできる。 全然違うことで悩んでいて見つけた方法なので、使い所はよくわからない(笑) けど、メモとして残しておく。 以下はSpockで書いた場合で、メソッドの呼ばれた回数を集計してる。 (実際に回…