[英]Java JUnit test does not pass
我有一個方法,如果名稱與正則表達式匹配,則必須返回true;如果名稱具有特殊字符或數字,則必須返回null。
這是方法:
@SuppressWarnings("null")
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("/^[a-zA-Z\\s]+$/");
//check if the name has special characters
Matcher m = p.matcher(text);
boolean b = m.find();
//cast the null to boolean
Boolean boolean1 = (Boolean) null;
if (m.matches()) {
return true;
}
else {
return boolean1;
}
}
這是對無法通過的方法的測試:
@Test
public void parseBeanCheck() throws NumberFormatException, IOException, SAXException, IntrospectionException {
IngenicoForwardingHelper helper = new IngenicoForwardingHelper();
String test1 = "Steve Jobs";
Assert.assertTrue(helper.containsSpecialCharacters(test1));
//This should return Null
String test2 = "Steve Jobs1";
Assert.assertNull(helper.containsSpecialCharacters(test2));
//This should return Null
String test3 = "Steve Jöbs";
Assert.assertNull(helper.containsSpecialCharacters(test3));
}
您的方法返回一個boolean
,該boolean
是僅允許值為true
和false
的原始類型。 它不允許null
,因此您對assertNull()
測試將永遠無法進行!
您可以將方法簽名更改為返回Boolean
,但通常最好避免從方法中返回null
。 無論如何,返回true
或false
會比true
或null
更有意義。
在Java中,您的正則表達式不需要(也不應該)在開始和結尾處都使用斜杠。
您可以將代碼更改為以下內容:
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("^[a-zA-Z\\s]+$");
Matcher m = p.matcher(text);
return !m.matches();
}
或更簡單地說:
public boolean containsSpecialCharacters(String text) {
return !text.matches("[a-zA-Z\\s]+");
}
並進行如下測試:
@Test
public void parseBeanCheck() throws NumberFormatException, IOException, SAXException, IntrospectionException {
IngenicoForwardingHelper helper = new IngenicoForwardingHelper();
Assert.assertFalse(helper.containsSpecialCharacters("Steve Jobs"));
Assert.assertTrue(helper.containsSpecialCharacters("Steve Jobs1"));
Assert.assertTrue(helper.containsSpecialCharacters("Steve Jöbs"));
}
還值得一提的是\\s
不僅將匹配空格,而且還將匹配制表符,換行符,回車符等。因此請確保這正是您想要的。
您應該將特殊字符檢查簡化為:
public boolean containsSpecialCharacters(String text) {
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text);
return m.find();
}
並使用Assert.assertTrue
和Assert.assertFalse
進行測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.