Java 如何在JUnit中测试错误路径和转角情况?

Java 如何在JUnit中测试错误路径和转角情况?,java,junit,Java,Junit,我有代码,我必须为它编写JUnit测试。我已经为快乐路径编写了测试,但我必须为转角情况和错误路径编写测试。你能帮我找到解决办法吗 public String reverseWords(String input) { String oneOrMoreSpaces = "\\s+"; String[] words = input.split(oneOrMoreSpaces); String completeAnagram = "";

我有代码,我必须为它编写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;
}
公共字符串反转记录(字符串输入){
字符串oneOrMoreSpaces=“\\s+”;
String[]words=input.split(一个或多个空格);
字符串completeAnagram=“”;
for(int i=0;i
如果需要验证异常,可以使用Junit@test(预期=Yor异常)

例: obj需要在类中初始化

@Test(expected=NullPointerException.class)
public void testNullPonterException(){

String val = obj.reverseWords(null);

}
否则,当您需要验证异常的某些其他属性时,我们可以使用ExpectedException规则

@Rule
public ExpectedException exceptionRule = ExpectedException.none();
 
@Test
public void whentestNullPonterExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NullPointerException.class);
    exceptionRule.expectMessage("Invalid Input");
    String val = obj.reverseWords(null);
}

如果需要验证异常,可以使用Junit@test(预期=Yor异常)

例: obj需要在类中初始化

@Test(expected=NullPointerException.class)
public void testNullPonterException(){

String val = obj.reverseWords(null);

}
否则,当您需要验证异常的某些其他属性时,我们可以使用ExpectedException规则

@Rule
public ExpectedException exceptionRule = ExpectedException.none();
 
@Test
public void whentestNullPonterExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NullPointerException.class);
    exceptionRule.expectMessage("Invalid Input");
    String val = obj.reverseWords(null);
}

常见错误和边缘情况是输入为
null
或空字符串。

常见错误和边缘情况是输入为
null
或空字符串。

这感觉像是一个错误。不过,这个练习已经足够好了!代码似乎包含(至少)一个错误,因此很有意思地看到在哪一步可以发现这个错误

解决此类问题的一些指导原则:

  • 只有当您知道功能应该是什么时,才能考虑测试一个方法。这里的简短答案似乎是给出一个句子,将每个单词颠倒过来,但这可能需要一些改进

  • 一旦您认为您知道该方法应该做什么,您就可以提出一系列示例输入和输出。这些最终将成为您的测试用例

  • 通过生成示例,您可以批判性地查找复杂(“角落”)案例。如果没有文字怎么办?字母应该和标点符号一样对待吗?颠倒一个字母的单词会有什么效果?您不需要任何代码,只需要了解应用程序域。每一个问题都可能引发更多的例子

  • 一旦有了足够的示例,就可以为它们创建测试用例。看起来很自然

  • 随着需求驱动测试用例的启动和运行,您可以分析实现。是否涵盖每条线路/分支?如果代码中的< /代码>分支,是否确实有测试用例来执行<代码>?如果有未执行的代码,请返回需求,思考哪个示例需要此分支。然后再加上这个例子,直到你有了完整的覆盖范围

  • 一旦您有了完整的分支覆盖,您可以尝试并故意在代码中引入一些小错误。如果你更换了一个
    ,这感觉像是一个错误。不过,这个练习已经足够好了!代码似乎包含(至少)一个错误,因此很有意思地看到在哪一步可以发现这个错误

    解决此类问题的一些指导原则:

  • 只有当您知道功能应该是什么时,才能考虑测试一个方法。这里的简短答案似乎是给出一个句子,将每个单词颠倒过来,但这可能需要一些改进

  • 一旦您认为您知道该方法应该做什么,您就可以提出一系列示例输入和输出。这些最终将成为您的测试用例

  • 通过生成示例,您可以批判性地查找复杂(“角落”)案例。如果没有文字怎么办?字母应该和标点符号一样对待吗?颠倒一个字母的单词会有什么效果?您不需要任何代码,只需要了解应用程序域。每一个问题都可能引发更多的例子

  • 一旦有了足够的示例,就可以为它们创建测试用例。看起来很自然

  • 随着需求驱动测试用例的启动和运行,您可以分析实现。是否涵盖每条线路/分支?如果代码中的< /代码>分支,是否确实有测试用例来执行<代码>?如果有未执行的代码,请返回需求,思考哪个示例需要此分支。然后再加上这个例子,直到你有了完整的覆盖范围

  • 一旦您有了完整的分支覆盖,您可以尝试并故意在代码中引入一些小错误。如果更换