home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2010/10/14/System.exit(anyInt())をmockする!! (v1)

日記/2010/10/14/System.exit(anyInt())をmockする!! (v1)

日記 / 2010 / 10 / 14 / System.exit(anyInt())をmockする!! (v1)
id: 809 所有者: msakamoto-sf    作成日: 2010-10-14 12:35:56
カテゴリ: Java 
public class Foo {
    public void shutdown() {
        System.exit(0);
    }
}

Fooクラスのshutdown()メソッドで、以下の挙動をassertしたいんだけど・・・

  1. System.exit()が呼ばれていること。
  2. その引数に"0"が渡されていること。

書き方が分からん!!

Mockitoだけではstaticメソッドをmock出来ない→PowerMock + MockitoならOK。
さらに

@RunWith(PowerMockRunner.class)

でjava.lang や java.net などのシステムクラスのstaticメソッドもmockできる。

ここまではOKなんだけど・・・
実際にassertをどう書けば良いのか分からない。

@RunWith(PowerMockRunner.class)
@PrepareForTest( { Foo.class })
public class FooTest extends TestCase {
 
    @Test
    public void shutdown()
    {
        mockStatic(System.class);
        PowerMockito.doNothing().when(System.class);
 
        Foo f = new Foo();
        f.shutdown();
    }
}

ここまでは書けるんだけど、実際にverifyStatic()やargument matcherをどう組み合わせれば良いのかで手詰まり。

・・・フツーこんなのテストしないのかな?いやでも、マジで「"1"でもなく"2"でもなく、ちゃんと"0"を渡していて、なおかつ1回だけ呼ばれていること」をassertできないと不安で不安で困る。
だって"0"以外が渡されたら終了コードが期待してないものになるじゃん?そりゃ不味い。なのでこれをassertできないとテストの意味がない。

困ったな・・・。

参考メモ:


プレーンテキスト形式でダウンロード
表示中のバージョン : 1
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2010-10-14 13:06:24
md5:4fa6fd2cb38987fd422d808b0d28ef55
sha1:3a2a36e5766b6b5618ffc168b6574db9b9477c94
コメント
コメントを投稿するにはログインして下さい。