2017-12-27 39 views
0

ユニットテストを行うときにEasyMockキャプチャを使用する必要があるかどうかわかりません。 ウェブサイトでいくつかの資料を読んだことがありますが、私の理解が正しいかどうか分かりません。EasyMockでユニットテストのオブジェクトではなくキャプチャを使用する必要がありますか?

例えばコードの下に使用するには:ユーザーオブジェクトがレジスタ()メソッド内に作成されているので、それがuserDaoの引数です:

public class UserService { 

    private UserDao userDao; 

    public boolean register() { 

     User user = new User(); 
     user.type = "VIP"; 

     return userDao.insertUser(user); 
    } 
} 

public class UserServiceTest { 

    public void testRegister { 

     UserDao userDao = createMock(UserDao.class); 
     Capture<User> captureUser = new Capture<>(); 

     expect(userDao.insertUser(capture(captureUser))) 
      .andReturn(true); 
     replay(userDao); 

     userService.setUserDao(userDao); 
     userService.register(); 

     verify(userDao); 
    } 
} 
  1. が、私はこのケースでキャプチャを使用すべき.insertUser(ユーザー)。だから、私はそれをキャプチャを使用する必要がありますか?

  2. それは、つまり:私がtestTargetClass.testTargetMethod()をテストしたいときです。 testTargetMethod()内に別のサービスコールがあり、その引数がtestTargetMethod()内に作成された場合は、引数としてキャプチャを使用する必要がありますか?

  3. 私はそれをテストするために以下のコードを使用できますか?

    ます。public void {testRegister

    UserDao userDao = createMock(UserDao.class); 
    
    User mockUser = new User(); 
    mockUser.setType = "VIP"; 
    
    expect(userDao.insertUser(mockUser)).andReturn(true); 
    replay(userDao); 
    
    userService.setUserDao(userDao); 
    userService.register(); 
    
    verify(userDao); 
    

    }事前に

ありがとう!

答えて

0

パラメータを確認する場合は、2つの選択肢があります。

  1. マッチャーを使用します。パラメータは(ようにテストのアイデンティティ、平等など)簡単でテストする場合と同様にuserDao.insertUser(same(user))
  2. キャプチャ

を使用して、マッチャは完璧に動作し、優先されなければなりません。

パラメータをテストするのが難しい場合。たとえば、複数の属性をチェックしたい場合は、キャプチャするほうがはるかに簡単になります。するでしょう

User user = capturedUser.getValue(); 
assertEquals("name", user.getName()); 
assertEquals(16, user.getAge()); 
0

あなたの理解は多かれ少なかれ正しいです。追加される唯一のことは、上記のテストの両方を使ってtest_functionをテストすることができますが、内部のサービス/関数呼び出しがあり、値をチェックし、関数に渡される引数のクラス型を検証したい場合ですキャプチャ/引数キャプチャが使用されます。

したがって、あなたの例では:capture(user)を使用するときに、Userオブジェクトの値をチェックしたいと思うでしょう。