【发布时间】:2018-08-25 08:15:16
【问题描述】:
我有以下课程:
public class BookProcessor {
private Map<String, Double> bookToValueRecord = new HashMap<>();
private Map<String, Integer> bookToCountRecord = new HashMap<>();
private int counter = 0;
public void processBook(Book book) {
counter++;
recordBook(book);
if (counter % 5 == 0) {
printSomeReport();
} if (counter % 10 == 0) {
printAnotherReport();
}
}
private void printAnotherReport() {
//just print something
}
private void printSomeReport() {
//print something else here
}
private void recordBook(Book book) {
bookToValueRecord.put(book.getTitle(), book.getValue());
bookToCountRecord.put(book.getTitle(), bookToCountRecord.getOrDefault(book.getProduct(), 0)+book.getCount());
}
}
我的想法是创建一个带有字段BookProcessor testee; 的测试类BookProcessorTest 我不知道是否需要模拟它?我的一项测试将是shouldProcessBook()。在这个测试中,我将创建一个示例Book 对象,然后我将调用testee.processBook(myBookObject),但是我应该断言或验证什么?我是否应该检查此记录是否已保存到bookToValueRecord?如果是,鉴于这是一个私有字段,如何?
另外,如何在将 5 本书保存到我的 Map 后进行测试,我正在打印一些报告?我应该测试printSomeReport() 是否已被调用?如果是,那么如何考虑printSomeReport 是私有方法?
【问题讨论】:
标签: java unit-testing testing junit mocking