簡體   English   中英

JUnit斷言:檢查Object是否等於String

[英]JUnit assertThat: check that Object equals String

我將Map聲明如下:

Map<String, Object> data

我在其中放入一個String並驗證其值如下:

assertEquals("value", data.get("key"));

現在,我想重寫驗證以使用assertThat而不是assertEquals 我嘗試過以下方法:

assertThat(data.get("key"), equalTo("value"));

當然,由於類型不匹配,它不起作用:

Wrong 2nd argument type. Found: 'org.hamcrest.Matcher<java.lang.String>', required: 'org.hamcrest.Matcher<? super java.lang.Object>' less...

String的第一個參數的顯式類型轉換有幫助,但我想避免它。 例如, assertEquals不需要類型轉換。 那么,我如何使用assertThat方法檢查上面聲明的Map對象中的值是否等於特定的String

“更多斷言”的做事方式是:

Map<String, Object> expectedData = Collections.singletonMap("key", "value");

asssertThat(data, is(expectedData));

請注意:

  • 也許你需要類型提示來調用singletonMap
  • 除了匹配,還有其他的匹配,將允許你檢查數據包含你的“預期”的地圖數據

對於你的具體問題:這是因為泛型在這里發揮作用; 使用(String) data.get("key") - 告訴編譯器“實際”參數是String類型可能就足夠了。

最后 - 我不知道你的問題是什么。 我寫下這段代碼:

public void test() {
    Map<String, Object> data = new HashMap<>();
    data.put("key", "value");
    assertThat(data.get("key"), is("value"));

    Map<String, Object> expectedData = Collections.singletonMap("key", "value");
    assertThat(data, is(expectedData));
}

編譯很好,單元測試運行並通過。 換句話說:實際上我無法重現你的問題。

試試這個

assertThat(data.get("key"), equalTo("value"))

要么

    assertThat(data.get("key"), CoreMatchers.equalTo("value"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM