为什么在这个JUnit测试中显示错误的数字?

时间:2015-02-05 21:37:59

标签: java junit

所以这是我的解决方案代码:

public int count_two_char(String s, char c, char d){
    int count = 0;
    int count1 = 0;

    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == c) {
            count = count + 1;
        }

        for (int i1 = 0; i1 < s.length(); i1++) {
            if (s.charAt(i1) == d) {
                count1 = count1 + 1;
            }
        }
    }
    return count + count1;
}

这是我的测试代码:

@Test
public void tests3() {
    code.Solution s =  new code.Solution();
    String input = "llss";
    int expected = 4;
    char c ='l';
    char d ='s';
    int actual = s.count_two_char(input, c, d);
    assertTrue("Expected was" +expected+"but the actual was" +actual  ,  expected == actual);
}

但是当我测试它时。它显示一个错误,预计是4但实际是10.为什么??我现在很困惑。

2 个答案:

答案 0 :(得分:7)

因为您的大括号没有缩进,所以看起来您有2个单独的for循环。但在更好地排好它们之后:

  for(int i=0; i<s.length(); i++){
     if(s.charAt(i) == c){
        count = count + 1;
     }


     for(int i1=0; i1<s.length(); i1++){
        if(s.charAt(i1) == d){
           count1 = count1 + 1;

        }

     }

  }

您可以看到第二个for循环嵌套在第一个for循环中,因此您的count1将高于预期。

for循环之间移动最后一个大括号,它们将被取消。这应该减少返回的计数,以便你的测试通过。

答案 1 :(得分:3)

这是因为您有一个不需要的for循环。两个if都应该进入同一个循环,如下所示:

for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == c) {
        count = count + 1;
    }
    if (s.charAt(i) == d) {
        count1 = count1 + 1;
    }
}

就目前而言,d个字符的数量乘以字符串的长度,产生2 + 4 * 2 = 10.

如果将count = count+1替换为等效的count++,则可以使代码更加惯用于该语言。您也可以完全删除count1,因为无论如何都要在最后添加两个计数。