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
我的代码出了什么问题?
答案 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()
表示它们具有相同的内容。