【发布时间】:2014-03-13 03:55:41
【问题描述】:
我正在尝试练习 QA 面试,我想处理我能想到的尽可能多的测试用例。我相信我的方法适用于所有情况,除非输入为 null 我不确定如何处理该异常。编译器会在代码运行之前先给我一个错误。所以我不确定如何处理该异常。我四处阅读,不推荐catching 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);
}
【问题讨论】:
-
我看到了审查您的测试用例的请求,但我看到的只是一个实现。我错过了什么吗?
-
很难想出其他可能破坏字符串反转算法的测试用例。我唯一会考虑的是字符串是否比整数的最大值长,但这显然在 Java 中不会发生。
-
@Liondancer 你已经逐个字符地处理了字符串,除了它实际上是通过组合字符而带有重音的 unicode,现在你已经反转了它,重音在错误的字符上。 stackoverflow.com/q/7476535/478656 还有inkling.com/read/programming-perl-christiansen-4th/chapter-6/… 和joelonsoftware.com/articles/Unicode.html
-
@Liondancer 我什至不确定Unicode字符串是否可行,有太多的情况,有些事情颠倒是没有意义的,一些单一的模式可能会以多种方式颠倒,具体取决于它们是什么人类语言在(我找不到我正在寻找的关于它的好文章)。这在简短的采访风格功能中肯定是不可能的。我提到它是因为面试 QA 工作,谈论字符串,说“我认为这适用于每种情况”而不考虑 Unicode,似乎很糟糕。至少将其作为函数无法/无法处理的内容提及。
-
测试用例:
null、""、"x",以及一堆随机生成的任意长度> 1的字符串。