亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從方法調用返回時模擬和處理 Map.Entry

從方法調用返回時模擬和處理 Map.Entry

一只名叫tom的貓 2023-06-21 15:41:52
簡介:當從方法調用返回時,我對如何處理單個“Map.Entry”感到困惑。在我的具體情況下,我需要模擬這個(目前使用mockito),但我的問題是如何將“Map.Entry”作為一個單元處理,而不是模擬它......兩者的幫助將是巨大的贊賞。============================我有一個像下面這樣的方法。我需要創建一個匹配的實體(我假設是一個 Map.Entry),以便在調用該方法時模擬返回。我不知道如何創建單個 Map.Entry。我一直追蹤到對數據庫的 sql 調用的調用,但只能找到將返回的對象轉換為 Map.Entry 的點。沒有說明如何構建這樣的東西。我需要有關如何構建可由模擬返回的單個“Map.Entry”的幫助。 public Map.Entry<Date,Boolean> getLastModified(SomeClass someClass)    throws Exception    {        return clusterViewDataProvider.getClusterModified(someClass);    }這是一行將為我創建模擬對象的行。為了簡單起見,假設上面的方法位于“Foo”類中。Foo foo = mock(Foo.class);然后我需要這樣的東西來說明當調用該方法(作為模擬)時,它應該返回我需要構建的“Map.Entry”。when(foo.getLastModifiedGid(any())).thenReturn(the Map.Entry I don't know how to make yet);最后,我需要斷言關于返回的 Map.Entry 的一些可測試的內容。我可以檢查斷言中的鍵和值 - 沒有比這更奇特的了 - 再次,我不確定如何將其作為單個 Map.Entry 訪問...assertTrue(The Key == SomeDate)assertTrue(The Value == True)如果我有任何不清楚的地方,請發表評論,我會澄清。格拉茨。
查看完整描述

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.


查看完整回答
反對 回復 2023-06-21
?
繁星coding

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);

我對您為什么要斷言有關條目本身的某些內容感到有些困惑。如果你定義它,它應該是你的。如果您的測試方法更改了它,請測試該結果,而不是您提供的固定對象。


查看完整回答
反對 回復 2023-06-21
?
jeck貓

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(...))


查看完整回答
反對 回復 2023-06-21
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號