2011-03-18 7 views
7

サービスインタフェース使用して春のMVCでのサービス層のテスト:easymock

public List<UserAccount> getUserAccounts(); 
public List<UserAccount> getUserAccounts(ResultsetOptions resultsetOptions, List<SortOption> sortOptions); 

サービスの実装:

public List<UserAccount> getUserAccounts() { 
    return getUserAccounts(null, null); 
} 
public List<UserAccount> getUserAccounts(ResultsetOptions resultsetOptions, List<SortOption> sortOptions) { 
    return getUserAccountDAO().getUserAccounts(resultsetOptions, sortOptions); 
} 

どのように私はこの使用してeasymockまたはその他の実行可能なテスト方法をテストすることができますか?サンプルコードが評価されます。パラメーターとしてオブジェクトを渡すことが非常に混乱しやすいためです。サービス層をテストする最良の方法は何か明確に説明されています。テストサービスインタフェースはユニットテストまたは統合テストと見なされますか?ここで

+1

金曜日の夜に質問をするのは良い考えではありません。週末と月曜日に誰もこれを見ないので、彼らは新しい質問で忙しいでしょう。私は確かにいくつかのテストの看護師は確かにこれの答えと説明を知っていると私を助けるだろう。 – kneethan

答えて

4

あなたは注釈でのJUnit 4を使用していると仮定すると、行く:

import static org.easymock.EasyMock.createStrictMock; 
import static org.easymock.EasyMock.expect; 
import static org.easymock.EasyMock.replay; 
import static org.easymock.EasyMock.verify; 

public class UserAccountServiceTest 

    private UserAccountServiceImpl service; 
    private UserAccountDAO mockDao; 

    /** 
    * setUp overrides the default, We will use it to instantiate our required 
    * objects so that we get a clean copy for each test. 
    */ 
    @Before 
    public void setUp() { 
      service = new UserAccountServiceImpl(); 
      mockDao = createStrictMock(UserAccountDAO.class); 
      service.setUserAccountDAO(mockDao); 
    } 

    /** 
    * This method will test the "rosy" scenario of passing a valid 
    * arguments and retrieveing the useraccounts. 
    */ 
    @Test 
    public void testGetUserAccounts() { 

      // fill in the values that you may want to return as results 
      List<UserAccount> results = new User(); 

      /* You may decide to pass the real objects for ResultsetOptions & SortOptions */ 
      expect(mockDao.getUserAccounts(null, null) 
       .andReturn(results); 

      replay(mockDao); 
      assertNotNull(service.getUserAccounts(null, null)); 
      verify(mockDao); 
    } 

} 

また、あなたはJUnitの4上のクイックヘルプのためのJUnit 3

Refer thisを使用している場合は特にthis article便利かもしれません。

希望に役立ちます。

+0

あなたの応答をありがとう、私たちはユニットテストに関連していないいくつかのオブジェクトパラメータに遭遇するたびにexpectコールでnullにしますか? – kneethan

+0

これら2つのメソッドの単体テストケースを作成するのは本当に意味がありますか?私のために何もDAO層に委任する、まだ我々はテストする必要がありますか? – kneethan

+0

シンプルなゲッターの場合、サービスメソッドに条件とif/elseパスがある場合はそうではありません。 1つの他のことは、ユニットテストの全目的は、サービスとDAO(これは統合テストと呼ばれます)ではなく、単一のユニット(この場合Service)をユニットテストすることです。ヌルを渡すのは簡単なテストです。しかし、コメントに書かれているように、これらのオブジェクト(ResultSetOptions、SortOptions)も作成する必要があります。準備が整っていない場合(つまり、インターフェイスのみと実装がない場合)、モック実装を使用する必要があります。 – Nilesh

関連する問題