我有代码,我必须为它编写 JUnit 测试。我已经为快乐路径编写了测试,但我必须为极端情况和错误路径编写测试。你能帮我找到解决方案吗?
public String reverseWords(String input) {
String oneOrMoreSpaces = "\\s+";
String[] words = input.split(oneOrMoreSpaces);
String completeAnagram = "";
for (int i = 0; i < words.length; i++) {
char[] symbol = words[i].toCharArray();
char newSymbolSequence;
int j = symbol.length - 1, k = 0;
while (k < j) {
if (!Character.isAlphabetic(symbol[k]))
k++;
else if (!Character.isAlphabetic(symbol[j]))
j--;
else {
newSymbolSequence = symbol[k];
symbol[k] = symbol[j];
symbol[j] = newSymbolSequence;
k++;
j--;
}
}
completeAnagram = new String(symbol);
}
return completeAnagram;
}
Run Code Online (Sandbox Code Playgroud)
这感觉就像一个家庭作业问题。不过,这项运动已经足够好了!该代码似乎包含(至少)一个错误,这使得查看您可以在哪一步发现这一点很有趣。
解决此类问题的一些指南:
如果您知道功能应该是什么,您只能考虑测试方法。这里的简短答案似乎是给了一个句子,生成每个单词颠倒的句子,但这可以使用一些改进。
一旦您认为您知道该方法应该做什么,您就可以想出一系列示例输入和输出。这些最终将成为您的测试用例。
通过生成示例,您可以批判性地寻找复杂的(“角落”?)案例。如果没有词会发生什么?字母应该和标点符号一样对待吗?反转一个字母的单词有什么作用?您不需要任何代码,只需要了解应用程序域。这些问题中的每一个都可能产生更多的例子。
一旦你有足够的例子,你就可以为它们创建测试用例。参数化测试似乎很自然。
随着您的需求驱动的测试用例启动并运行,您可以分析实现。是否覆盖了每一行/分支?确实有测试用例else if
在代码中间练习分支吗?如果有没有执行的代码,回到需求,想想哪个例子会需要这个分支。然后添加该示例,直到您完全覆盖。
一旦你有完整的分支覆盖,你可以尝试故意在代码中引入小错误。如果您将 a 替换为<
a <=
,您的一个示例是否会将其显示为错误?如果没有,请添加这样的示例!
如果您想了解更多信息,请查找类别分区(第 3 步)、分支覆盖(第 5 步)和变异覆盖(第 6 步)。为此,您可以查看我们的开放获取在线书籍软件测试:从理论到实践,其中包括视频、幻灯片和练习。享受!
归档时间: |
|
查看次数: |
357 次 |
最近记录: |