2016-05-03 43 views
2

我想斷言存儲在屬性一些文本文件:我可以在JAVA的屬性文件中使用正則表達式嗎?

Text=\ 
some text\n\ 
to be\n\ 
asserted\n\ 
based on 1567 ratings 

1567不同,所以我想確保它獲得與正則表達式會說,這可以通過使用\ d或任意數量的替代\ d,因爲我必須在屬性文件中轉義\。

所以我試圖用

Text=\ 
some text\n\ 
to be\n\ 
asserted\n\ 
based on \\d ratings 

這是我使用斷言方法:

Assert.assertEquals(PropertyLoader.loadProperty("filename.properties", "Text"),actual); 

實際是一個WebElement,讓我從網站上的文字,我用actual.getText()

這是具有loadProperty方法的類

class PropertyLoader { 
    static String loadProperty(String file, String name) { 
     Properties props = new Properties(); 
     try { 
      props.load(getResourceAsStream(file)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return props.getProperty(name); 
    } 
} 

最終的結果是我得到

比較失敗:

不知道這甚至有可能還是我只是失去了一些東西?

+1

沒有什麼能阻止你存儲的正則表達式字符串有代替的,但是'的assertEquals '方法不會嘗試匹配正則表達式 - 您必須使用不同的斷言。 – jsheeran

+0

您可能會添加一些邏輯來將您的屬性鍵標記爲正則表達式值,並嘗試將它們作爲模式加載,然後在此情況下調用assertTrue等嘗試將模式與給定的String匹配。 – Mena

+0

你可以使用類似assertTrue(testString.matches(regex))的東西。順便說一句,\ d不會削減它,因爲它只匹配一個數字。你必須使用\ d +或\ d {4} ... – mtj

回答

1

首先你的屬性文件的內容應該是:

Text=\ 
some text\n\ 
to be\n\ 
asserted\n\ 
based on \\d+ ratings 

那麼你的測試用例將是:

Assert.assertTrue(
    Pattern.compile(
     PropertyLoader.loadProperty("filename.properties", "Text"), 
     Pattern.MULTILINE 
    ).matcher(actual).matches() 
); 
+0

感謝尼古拉斯,這工作像一個魅力:) – Dragan

相關問題