【发布时间】:2020-02-06 20:57:34
【问题描述】:
假设我有课程Formater
class Formatter {
public FormattedData format(Map<String, Data> data) {
return .....
}
}
另一个类Collector使用Formatter并可以返回格式化数据
class Collector {
Formatter formatter;
Map<Id, Data> map = new HashMap<>()
class Collector (Formatter formatter) {
this.formatter = formatter;
}
public void addData(Data data) (
map.put(data.getId(), data);
}
public FormattedData getFormattedData() {
return formatter.format(map)
}
所以问题 - 我想编写测试。我为Formatter 类编写了所有测试,
但是我应该如何测试Collector?
因为我不应该依赖收集器的实现——我需要复制Formatter 的所有测试并将它们作为Collector 的输入传递。当然,在测试中我会将Map<String, Data> data 更改为Data data 作为输入数据类型,但无论如何都会有大量的代码重复。我怎样才能避免它?
【问题讨论】:
-
嘲讽就是答案。您将模拟的
Formatter传递给构造函数,然后检查是否调用了Formatter上的适当方法。实际上,我不完全确定您是否真的需要对几乎什么都不做的类进行测试(真的没有逻辑)。 -
用 Mockito 模拟。