刚学Java一月,字符串反转JUnit测试失败求助(含代码)
解决你的字符串反转JUnit测试失败问题
嘿,刚学Java一个月就上手写测试,已经很棒啦!咱们一步步拆解你的问题:
首先,你的代码里有几个关键问题,直接导致了测试失败和InvocationTargetException异常:
1. toString调用错误+未重写toString方法
你在测试里写了all.toString.equals("elppa"),这里藏着两个坑:
- 少了方法调用的括号:应该是
all.toString(),不然你是在拿toString这个方法对象本身和字符串"elppa"做比较,完全不是一回事,这也是抛出异常的主要原因。 - 你的类没有重写
Object类的默认toString()方法,默认的toString会返回类似wechillin@123abc的字符串(类名+哈希值),永远不可能等于"elppa"。
2. 命名规范小细节(不影响功能,但建议遵循)
Java里类名要大驼峰(比如Wechillin而非wechillin),方法名要小驼峰(reverse而非Reverse),这样代码更符合行业习惯,也更容易被别人读懂。
修正后的代码示例
方案1:保留原结构,重写toString并修正调用
// 修正类名和方法名,重写toString方法 public class Wechillin { public String word; // 构造方法名必须和类名一致 public Wechillin(String wordin) { word = wordin; } public void reverse() { String newword = ""; for (int i = word.length() - 1; i >= 0; i--) { newword += word.charAt(i); } word = newword; } // 重写toString,返回当前的word值 @Override public String toString() { return word; } }
对应的测试代码:
@Test public void testReverse() { Wechillin all = new Wechillin("apple"); all.reverse(); // 用assertEquals比assertTrue更直观,失败时能直接看到预期和实际值的差异 assertEquals("elppa", all.toString()); }
方案2:让reverse方法直接返回结果(更灵活)
如果不想依赖成员变量,可以修改方法让它直接返回反转后的字符串,这样代码逻辑更清晰:
public class Wechillin { public String reverse(String word) { String newword = ""; for (int i = word.length() - 1; i >= 0; i--) { newword += word.charAt(i); } return newword; } }
测试代码会更简洁:
@Test public void testReverse() { Wechillin all = new Wechillin(); String result = all.reverse("apple"); assertEquals("elppa", result); }
最后提个小优化:循环里用+=拼接字符串效率不高,因为String是不可变的,每次拼接都会创建新对象。刚学的话可以先不管,等后面接触StringBuilder后,可以改成一行代码搞定反转:
public String reverse(String word) { return new StringBuilder(word).reverse().toString(); }
不过你自己写循环练习的过程,其实更能帮你理解字符串的底层逻辑哦!
内容的提问来源于stack exchange,提问作者user14604959
相关产品推荐
相关产品推荐

