簡體   English   中英

Java JUnit測試未通過

[英]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是僅允許值為truefalse的原始類型。 它不允許null ,因此您對assertNull()測試將永遠無法進行!

您可以將方法簽名更改為返回Boolean ,但通常最好避免從方法中返回null 無論如何,返回truefalse會比truenull更有意義。

在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.assertTrueAssert.assertFalse進行測試

暫無
暫無

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

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