4

データストアへの接続に使用するいくつかのサービスクラスで、Mockitoを使用してテストを開始しています。ここで、テストを作成するためのベストプラクティスの方法を決定したいと思います。原則は、エンティティごとに、特定のエンティティのデータストア(mongo / mysqlなど)から行を一覧表示、追加、削除などする方法があることです。

会社のリストを保存しているデータベースと会話できるこのクラスを受講してください

public class CompanyService extends Service{
    public CompanyService() {
        ...
    }

    public saveCompany(Company company) {
         ...
    }

     // get a list of all companies
    public List<Company> getCompanies() {

         List<Company> companies = new ArrayList<Company>();

         try {
             CompanyResult<Rows<String, String>> rows = db.query(....); 

             for (Row<String, String> row : rows.getResult()) {
                 companies.add(row.getColumns());
             }
         catch (Exception e){
            logger.warn("Error retrieving companies", e);
         }

    }

}

getCompaniesメソッドで正確に何をテストする必要がありますか?Mockitoを使用してテストするにはどうすればよいですか?

4

2 に答える 2

2

テスト対象のシステムは、会社のサービスです。すべての依存関係/コラボレーターが適切に機能すると仮定して、それが適切に機能することをテストしたいと考えています。

オブジェクトは、メソッドdb内で心配する必要がある唯一の依存関係/コラボレーターのように見えます 。getCompanies()Mockito を使用して呼び出しをモックします。db.query()

次のようなテスト メソッドを設定できます。

@Test
public void testGetCompanies() {
  /*** Arraign ***/
  CompanyService cs = new CompanyService();

  // Setup mock db
  DB mockDb = mock(DB.class);

  // Setup fake results for query
  CompanyResult<Rows<String, String>> sampleResults = ... // build sample results here

  // Have query on mock return fake results
  when(db.query(/* match arguments */)).thenReturn(sampleResults);

  // Tell your System Under Test to use the mock collaborator
  cs.setDB(mockDb);

  /*** Act ***/
  CompanyResult<Rows<String, String>> results = cs.getCompanies();

  /*** Assert ***/
  ... // Test that results and sampleResults are effectively the same
}
于 2013-01-31T18:03:07.687 に答える
0

db クエリが空の結果、null を返した場合、または行に null 値または予期しない値がある場合、コードがどのように機能するかをテストできます。これらの値を返すように db クラスをモックできます。db クラスをモックして例外をスローし、コードがどのように反応するかを確認することもできます。

于 2013-01-31T18:02:05.260 に答える