3 回答
TA贡献1829条经验 获得超7个赞
无需创建您自己的Map.Entry
实现。您可以使用现有的实现之一,例如AbstractMap.SimpleEntry
:
Date date = new Date(); boolean value = true; Map.Entry<Date, Boolean> entry = new AbstractMap.SimpleEntry<>(date, value); when(foo.getLastModifiedGid(any())).thenReturn(entry);
或AbstractMap.SimpleImmutableEntry
:
Map.Entry<Date, Boolean> entry = new AbstractMap.SimpleImmutableEntry<>(date, value);
作为旁注,来自的日期类java.util
已过时,来自的类java.time
应用于 Java 8+。具体来说,java.util.Date
被替换为java.time.Instant
.
TA贡献1797条经验 获得超4个赞
构建您自己的自定义 Entry 类需要大量额外的代码实现,仅用于测试。
这应该是设计测试的一个危险信号,因为您很可能使问题变得比需要的复杂得多。
相反,为什么不创建一个实际的地图并让地图完成工作呢?
//define your expected response element
Date foo = ...;
Boolean bar = ...;
//instantiate map
Map<Date,Boolean> dummyMap = new HashMap<>();
dummyMap.put(foo, bar);
//fetch an actual working copy from a functional map
Map.Entry<Date, Boolean> baz = dummyMap.entrySet().stream().findFirst().get();
//mock away
when(foo.getLastModifiedGid(any())).thenReturn(baz);
我对您为什么要断言有关条目本身的某些内容感到有些困惑。如果你定义它,它应该是你的。如果您的测试方法更改了它,请测试该结果,而不是您提供的固定对象。
TA贡献1909条经验 获得超7个赞
您可以实现自己的条目
class DummyEntry<K,V> implements Map.Entry<K, V> {
K key;
V value;
public DummyEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
this.value = value;
return value;
}
}
然后将其返回到您的模拟中。
when(foo.getLastModifiedGid(any())).thenReturn(new DummyEntry(...))
添加回答
举报