鉴于下面的类拥有两个对象,一个用于修改文档,一个用于加载和存储它们,正确的单元测试应该是什么样子。为了测试,我使用了 jUnit5
和 Mockito
。
public class Reporter {
private final Modifer modifier;
private final Storage storage;
public Reporter(Modifier modifier, Storage storage) {
this.modifier = modifier;
this.storage = storage;
}
public List<Report> modify() {
List<Report> modificationReports = new LinkedList<>();
for (Document document : storage.getAll()) {
//modifies current document, saves new version and deletes old one
modifier.modify(document);
storage.save(document);
storage.delete(document);
//generates report
Report modificationReport = new Report();
modificationReport.setModifiedDocument(document);
modificationReport.setMessage("Fetched from " + Utils.getNiceFileName(document));
modificationReport.setExecutionTime(LocalDateTime.now());
modificationReports.add(modificationReport);
}
return modificationReports;
}
}
我有以下问题。我知道的良好做法是模拟对象不应该返回模拟。那么我在 for-each 循环中的 storage.getAll
方法应该返回什么,以便以下用于生成报告的代码具有可提供给 Report
对象和 Utils.getNiceFileName
静态方法的有效对象。
另外,如何处理 LocaldateTime.now()
之后断言它应该是哪个值。