为什么我的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
我的代码有什么问题?
你应该使用assertEquals(String, Object, Object)
,因为你需要比较两个字符串的值,而不是他们的身份。
(你可能不需要您的自定义信息的任何更多,如果你这样做)
在"b**k "
删除尾随的空间,还可以使用string.equals(String other)
功能比较字符串,而不是==
操作。 ==
只在比较字符串文字时才起作用,因为它们将指向相同的对象。
因此,例如,如果我改变了这种方法s.charAt(ⅰ)==“”上。结果将是s.chatAt(i).equals(a)?是对的吗? – QifengSun 2015-02-11 02:44:58
是,由于焦炭基本上是一个数,你可以用任何一种方式 – 2015-02-11 11:31:10
除了@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()
意味着它们具有相同的内容。
使用'代码格式对它们进行比较,而不是{} – immibis 2015-02-10 22:46:04
你必须要在后面加上一个空格。所以replaceVowels返回''b ** k“'但你期望''b ** k”'。 – immibis 2015-02-10 22:38:03
投票结束这是一个简单的印刷错误。 – immibis 2015-02-10 22:38:52
即使空间被删除,你将需要使用['expected.equals(实际)'](http://*.com/questions/513832/how-do-i-compare-strings-in-java) (或者使用'assertEquals'来代替)。 – rgettman 2015-02-10 22:40:58