用于反转字符串的测试用例

时间:2014-03-13 03:55:41

标签: java string testing

我正在尝试进行QA面试,我想处理尽可能多的测试用例。我相信我的方法适用于所有情况,除非输入是null我不知道如何处理该异常。在代码运行之前,编译器会先给出错误。所以我不知道如何处理这个异常。我四处阅读,不推荐catch NullPointerException。我将如何处理null输入。此外,如果其他人可以想到其他测试用例,我很乐意测试并看看它!

以下是我的测试用例:

""
"abcdef"
"abbbba"
null

不太确定如何处理

转义字符

"\n"  --> "n\"
"\t"  --> "t\"

特殊字符,例如

áe  -->  eá 

代码:

public static String reverseStr(String str) {
    int len = str.length();
    if (len <= 0) {
        return "Empty String";
    }
    char[] strArr = new char[len];
    int count = 0;
    for (int i = len - 1; i >= 0; i--) {
        strArr[count] = str.charAt(i);
        count++;
    }
    return new String(strArr);
}

在此处提出进一步建议之后是更新后的代码:

public static String reverseStr(String str) {
    if ( str == null ) {
          return null;
    }
    int len = str.length();
    if (len <= 0) {
        return "";
    }
    char[] strArr = new char[len];
    int count = 0;
    for (int i = len - 1; i >= 0; i--) {
        strArr[count] = str.charAt(i);
        count++;
    }
    return new String(strArr);
}

5 个答案:

答案 0 :(得分:3)

如果string为null,编译器不会给出错误,但在运行代码时会出现NullPointerException。您的reverseStr方法可以检查

if ( str == null ) {
  return "null string passed in";
}

或者你可以做类似

的事情
int len = (str != null) ? str.length() : 0

现在null和空字符串的长度都为0.这取决于你是否要以不同的方式处理null和empty。

答案 1 :(得分:3)

对于null case,您可以先在if(str==null) throw new IllegalArgumentException("arg must be not null")添加简单测试,然后在声明中添加throws IllegalArgumentException

答案 2 :(得分:2)

你应该在方法中做的第一件事检查无效:

public static String reverseStr(String str) {
    if(str==null){
        return null;
    }
    else{
       //the rest of your code goes here
    }
}

答案 3 :(得分:1)

如果字符串为空,我不明白为什么要返回"Empty String"。这意味着输入字符串为"gnirtS ytpmE"

如果字符串为空,则应返回空字符串。如果字符串是null,您应该返回null(或抛出异常)。

if (str == null) return null;
int len = str.length();
if (len == 0) return "";

答案 4 :(得分:1)

NPE(NullPointerException)来自于参数'str',当它为null时。如果用'null'替换参数是有意义的,所以它看起来像这样:int len = null.length();这没有多大意义。 '||'或者运算符与'|'不同或者运算符,如果第一个元素为真,则不评估另一个操作数,因为可以确定整个结果。在这种情况下利用这一点可以让你安全地调用str.isEmpty(),因为它保证不为null。

public static String reverseStr(String str) {
    if(null == str || str.isEmpty()){
        return "Empty String";
    }
    int len = str.length();

    char[] strArr = new char[len];
    int count = 0;
    for (int i = len - 1; i >= 0; i--) {
        strArr[count] = str.charAt(i);
        count++;
    }
    return new String(strArr);
}