为什么我的junit测试失败了?

时间:2015-02-10 22:37:14

标签: java junit

public String replaceVowels(String s){
   String replacement = "";
   for(int i = 0; i <s.length(); i++){
       if(s.charAt(i)=='a' || s.charAt(i)=='A' ||
               s.charAt(i)=='e' || s.charAt(i)=='E'||
               s.charAt(i)=='i' || s.charAt(i)=='I'||
               s.charAt(i)=='o' || s.charAt(i)=='O'||
               s.charAt(i)=='u' || s.charAt(i)=='U'){
           replacement = replacement + '*';
         }else{
             replacement = replacement + s.charAt(i);
         }

   }
   return replacement;

}

我希望代码在字符串中用*替换元音,这是我的测试代码

@Test public void tests8(){
code.Solution s =  new code.Solution();
String input = "book ";
String expected = "b**k";
String actual = s.replaceVowels(input);
assertTrue("Expected was" +expected+"but the actual was" +actual  ,  expected == actual);

}

当我运行junit时,错误是如此奇怪,它说

预期为b * * k但实际为b * * k

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:0)

您应该使用assertEquals(String, Object, Object),因为您需要比较两个字符串的值,而不是它们的身份。

(如果你这样做,你可能不再需要你的自定义信息)

答案 1 :(得分:0)

删除"b**k "中的尾随空格,并使用string.equals(String other)函数比较字符串,而不是==运算符。 ==仅在比较字符串文字时才起作用,因为它们将指向同一个对象。

答案 2 :(得分:0)

除了错误提及@immibis之外,您的测试用例还包括: assertTrue("Expected was" +expected+"but the actual was" +actual , expected == actual);

它应该是: assertTrue("Expected was" +expected+"but the actual was" +actual , expected.equals(actual));

==.equals(I)不同。

==表示它们是同一个实例,而.equals()表示它们具有相同的内容。