2016-05-12 4 views
1

Я пишу тестовый пример с использованием JUnit, и я также использую API Mockito, где это возможно. Collection<AppConfigTO> filteredCollection = CollectionUtils.select(configs, beanPredicate); - это код, где я застрял на тестировании. Я не могу издеваться над CollectionUtils, потому что я не получаю select() во время stubbing. Если я не использую Mockito, то как мне изменить значение filteredCollection на основе моей потребности. Я хочу, чтобы размер >0, так что я могу покрыть второй оператор if в своем отчете Cobertura.Проверка локальной переменной с помощью 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 делает слишком много вещей. Тест-тест должен проверять только одно. Разделите этот метод на несколько независимых методов тестирования.

Btw, вот лучший способ контролировать значение, возвращаемое 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

Смежные вопросы