我有疑问。我的CUT有一个公共的mehtode," sync()"返回void并使用一些变量,如" syncContactEnabled"它们是使用spring和属性文件设置的。 这是我的CUT:
public class ContactSyncServiceImpl implements SyncService {
public void sync() {
long start = System.currentTimeMillis();
logger.info("-----sync() start:{}", start);
if (!syncContactEnabled) { //***********first: want to test this if
logger.info("Contact sync isn't enabled.");
return;
}
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date now = new Date();
Date startDate = null;
String contactSyncStartDateConfig = configService.get(CONTACT_SYNC_START_DATE);
if (StringUtils.isBlank(contactSyncStartDateConfig)) { \\**********second: I want to test startDate value in this if-else
startDate = new Date(now.getTime() - syncStartDaysCount * 24 * 60 * 60 * 1000l);
} else {
try {
startDate = formatter.parse(contactSyncStartDateConfig);
} catch (Exception e) {
logger.warn("There's a problem parsing date:" + e);
}
}
/////////It is NOT complite code of class.......(:
}
第一个问题:
第二个问题:
最后,它是我的属性文件:
sync.contact.enabled=false
sync.page.size=100
sync.cron=0 30 6,18 * * ?
#*/1 * * * * *
sync.start.days.count=365
答案 0 :(得分:3)
第一个问题:
- 如何模拟一些变量,例如" syncContactEnabled"它在属性文件中设置?
你没有。
第二个问题:
- 如何测试" sync()"的内部方式方法,例如我如何测试" startDate" if-else条件中的值?
你也不是。
在进行单元测试时,您验证公共可观察行为,这意味着:根据输入返回结果,以及单元如何与 依赖进行通信。
变量' syncContactEnabled'是您未验证的实现细节。这是因为在不改变单位行为的情况下可能会改变,并且您不想在这种情况下更改测试。
我想,我只是可以使用一些测试:PowerMockito.donothing或PowerMockito.verify ..... yes ????我无法测试内部方式... - m.mjn202
任何机会都要避免使用 PowerMock(-ito)。在大多数情况下, PowerMock(-ito)的需求是设计糟糕和缺乏依赖注入的标志。
通常你会模拟依赖,你的单位与之通信的其他类。 唯一的例外是您的单位是抽象类。
如果你模拟了一个真正的类(而不是一个接口)并且需要禁止调用方法(doNothing(mock).someMethod()
)(例如因为它连接到数据库),则需要someMethod()
配置...)