gpt4 book ai didi

java - 使用 JUnit 和 Mockito 测试局部变量

转载 作者:行者123 更新时间:2023-11-30 02:55:58 24 4
gpt4 key购买 nike

我正在使用JUnit编写一个测试用例我也在使用 Mockito尽可能使用 API。 Collection<AppConfigTO> filteredCollection = CollectionUtils.select(configs, beanPredicate);是我被困在测试中的代码。我不能 mock CollectionUtils因为我不明白select() stub 时。如果我不使用Mockito那么我应该如何更改 filteredCollection 的值根据我的需要。我想要它的尺寸>0这样我就可以覆盖 Cobertura 中的第二个 if 语句报告。

测试方法:

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());
}

有什么方法可以让我继续测试。

提前致谢

最佳答案

I am also using Mockito API wherever possible.

不要“尽可能”使用 Mockito,更好的方法是在没有更好的方法时使用 Mockito。

所以你想练习分支filteredCollection.size()>0。在代码中我看到这个集合的内容是由 configCode 方法参数和 getAppConfig() 的返回值决定的。使用可以轻松控制这些。为它们使用适当的值来触发所需的执行路径。

请注意,测试方法 testGetAppConfig 做了太多事情。测试用例应该精确地测试一件事。将此方法拆分为多个独立的测试方法。

顺便说一句,这里有一个更好的方法来控制 AppConfigManager.getAppConfig() 返回的值,而无需使用模拟:

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

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

这种技术称为“扩展和覆盖”。

关于java - 使用 JUnit 和 Mockito 测试局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com