EasyMockを使ったテスト2

EasyMockを使ったテスト - suusuke@Hatenaの続きというか、補足。

  • Argument Matcher を使用した期待値の設定。

インスタンスが異なっても正としたい場合、前回は以下の用にすると書きましたがこれはあくまで、インスタンスが異なる場合という条件なので、使い方としては間違っている。

User user = new User();
user.setName = "suusuke";
expect(userDao.insert(not(same(user)))).andReturn(user);
↑これはuserインスタンスが異なる事が正


正しくというか、インスタンスが異なっても正とする場合はこのクラスのインスタンスだったらOKというのが正しいと思うので。

User user = new User();
user.setName = "suusuke";
expect(userDao.insert(isA(User.class))).andReturn(user);

とする。isA()メソッドは引数のクラスのインスタンスならOKというArgument Matcherの一つ。


Argument Matcher関連でもう一つ。


以下のような場合。

User user = new User();
user.setName = "suusuke";
expect(userDao.search(isA(User.class), null).andReturn(user);


IllegalStateException (2 matchers expected, 1 recorded) がスローされる。モックのメソッドの引数にArgument Macherを使っている場合は通常の引数がつかえない。
そのため、以下のようにする。

User user = new User();
user.setName = "suusuke";
expect(userDao.search(isA(User.class), isNull()).andReturn();


すべての引数をArgument Macherで記述すればOKになる。


まだまだ、EasyMockは知らない事がたくさん有るなと思った一日でした。