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(...))
添加回答
舉報