2015-11-12 12 views
0

我想測試具有特定值的公共變量。問題是我正在測試公共變量,而不是JavaBean。JUnit的Hamcrest庫有一個API來測試公共變量而不是屬性

Assert.assertThat(clientMapper.entries, Matchers.<ClientMapper.MapperEntry>hasItem(
    Matchers.allOf(
      Matchers.hasProperty("from", Matchers.is("/v1")), 
      Matchers.hasProperty("to", Matchers.is("/v2")) 
    ) 
)); 

而且我測試的類是因爲它沒有找到一個JavaBean屬性fromto,這是可以理解

public static class MapperEntry { 
    public String from; 
    public String to; 
} 

測試失敗,但我如何測試公共領域?

更新:我試圖找到適用於Java 7

+0

我們是在談論Java的8嗎?在這種情況下,對於流來說很容易......類似於...... assertThat(clientMapper.entries()。filter(p - >「/v1".equals(p.from)&&」/v2".equals (p.to))。size,greaterThan(0));' –

+0

否,不幸的是java7 –

+0

MapperEntry.equals方法是否覆蓋返回true,如果from/to是相等的?在這種情況下,具有適當的MapperEntry作爲參數的'hasItem'就足夠了... –

回答

1

NitorCreations' matchers library有領域的匹配:

Assert.assertThat(clientMapper.entries, Matchers<ClientMapper.MapperEntry>hasItem(
    Matchers.allOf(
     com.nitorcreations.Matchers.hasField("from", Matchers.is("/v1")), 
     com.nitorcreations.Matchers.hasField("to", Matchers.is("/v2")) 
))); 
0

解決方案,我不這麼認爲。公共領域在Java中很少見,這可能就是爲什麼沒有一個。你將不得不編寫自己的Matcher來處理這個問題。

如果該類有適當的toString()實現,那麼你可以使用字符串或正則表達式匹配器。

相關問題