2016-05-12 836 views
1

私はJUnitを使ってテストケースを作成しており、可能な限り、Mockito APIも使用しています。 Collection<AppConfigTO> filteredCollection = CollectionUtils.select(configs, beanPredicate);は、私がテストに固執しているコードです。私はCollectionUtilsをモックできません。なぜなら、スタブしている間にselect()を得ることができないからです。 Mockitoを使用しない場合は、私の必要に応じてfilteredCollectionの値をどのように変更する必要がありますか。私はサイズ>0だから私のCoberturaレポートの2番目のif文をカバーすることができます。テスト中のJUnitとMockitoでローカル変数をテストする

方法:

public List<AppConfigTO> getAppConfig(String configCode) { 
    List<AppConfigTO> list = null; 

    List<AppConfigTO> configs = getAppConfig(); 

    if(configs != null) { 
     EqualPredicate nameEqlPredicate = new EqualPredicate(configCode); 
     BeanPredicate beanPredicate = new BeanPredicate("configCode", nameEqlPredicate); 
     Collection<AppConfigTO> filteredCollection = CollectionUtils.select(configs, beanPredicate); 

     if(filteredCollection != null && filteredCollection.size()>0) { 
      list = new ArrayList<AppConfigTO>(); 
      for(AppConfigTO to : filteredCollection) { 
       list.add(to); 
      } 
     } 
    }else{ 
     list = appConfigDao.getAppConfig(configCode); 
    } 

    return list; 
} 

JUnitテストケース:

@Test 
    public void testGetAppConfig() throws Exception { 
    AppConfigManager appManager = new AppConfigManager(); 
    cacheProvider = new TestAppConfigManager(); 

    IAppConfigManager configManager = Mockito.mock(IAppConfigManager.class); 
    IAppConfigDao configDao = Mockito.mock(IAppConfigDao.class); 

    List<AppConfigTO> list = new ArrayList<>(); 

    Mockito.when(configManager.getAppConfig()).thenReturn(list); 
    Mockito.when(configDao.getAppConfig()).thenReturn(list); 

    appManager.setAppConfigDao(configDao); 
    list = appManager.getAppConfig(CONFIG_CODE); 

    assertNull(list); 
    assertNotNull(appManager.getAppConfigDao()); 
    assertSame("04852",this.CONFIG_CODE); 
    assertNotNull(configManager.getAppConfig()); 

    // No ConfigManager 
    appManager = new AppConfigManager(); 
    cacheProvider = new TestAppConfigManager(); 

    configManager = Mockito.mock(IAppConfigManager.class); 
    configDao = Mockito.mock(IAppConfigDao.class); 

    list = new ArrayList<>(); 

    Mockito.when(configManager.getAppConfig()).thenReturn(null); 
    Mockito.when(configDao.getAppConfig()).thenReturn(null); 

    appManager.setAppConfigDao(configDao); 
    list = appManager.getAppConfig(CONFIG_CODE);  

    assertTrue(list.isEmpty()); 
    assertNotNull(appManager.getAppConfigDao()); 
    assertSame("04852",this.CONFIG_CODE); 
    assertNull(configManager.getAppConfig()); 
} 

私がテストを続行することができるようにそれを行うにはどのような方法があります。可能な限り事前

答えて

1

おかげで私はまた、MockitoのAPIを使用しています。

代わりのMockitoを使用して「可能な限り」、 は、より良いアプローチには良い方法はありませんときMockitoを使用することです。

したがって、ブランチfilteredCollection.size()>0を運動させたいと思います。コードでは、このコレクションの内容はconfigCodeメソッドパラメータと戻り値getAppConfig()によって決まることがわかります。 これらは簡単に使用できます。適切な値を使用して、目的の実行パスをトリガーします。

試験方法testGetAppConfigはあまりにも多くのことを行っていることに注意してください。 テストケースは、正確に1つのことをテストする必要があります。 このメソッドを複数の独立したテストメソッドに分割します。

はところで、ここでモックを使用せずに、AppConfigManager.getAppConfig()によって返された値を制御するためのより良い方法です:

// fill this list appropriately 
final List<AppConfigTO> dummyList = Arrays.asList(...); 

AppConfigManager appManager = new AppConfigManager() { 
    @Override 
    public List<AppConfigTO> getAppConfig() { 
     return dummyList; 
    } 
}; 

この技術は、「拡張および上書き」として知られています。

+0

あなたは正しいです。ヤノスと私はこれがドンの清潔な方法だと思います。私はPowerMockitoを使うことを考えていましたが、それ以上はありません。ありがとうございました。 –

+0

あなたはそれが気に入ってうれしいです。それは本当に良い考え方です。 – janos

関連する問題