JUnit 5中如何正确测试toString()方法返回预期字符串?
解决JUnit测试toString()方法的问题
我来帮你搞定这个toString()的测试问题~先看看你当前代码里的几个关键问题:
你代码里的错误点
- assertEquals的参数完全用错了:你现在写的
assertEquals(schoonhoven, expected.equals("Schoonhoven 2 1 1 0 0")),第一个参数是Voetbalclub对象,第二个参数是一个布尔值(expected.equals(...)的结果),JUnit会尝试比较这两个完全不同类型的东西,肯定会失败。 - 错误的equals用法:如果你之前尝试
schoonhoven.equals(expected),这是把Voetbalclub实例和String实例比较——除非你特意重写了Voetbalclub的equals方法来支持和字符串比较,否则默认的equals只会比较对象引用或者同类型对象的属性,这自然也得不到正确结果。
正确的测试写法
要测试toString()方法,核心是调用对象的toString()方法拿到实际输出字符串,再和预期字符串比较。修改后的测试代码应该是这样:
@Test void toStringTest(){ Voetbalclub schoonhoven = new Voetbalclub("Schoonhoven"); // 先执行两次结果处理 schoonhoven.verwerkResultaat('g'); schoonhoven.verwerkResultaat('w'); // 定义预期的字符串 String expected = "Schoonhoven 2 1 1 0 0"; // 拿到实际的toString输出 String actual = schoonhoven.toString(); // 用assertEquals比较预期值和实际值(注意顺序:预期在前,实际在后) assertEquals(expected, actual); // 可选:打印结果方便调试 System.out.println(schoonhoven); }
额外提醒
- 确保
expected字符串和verwerkResultaat操作后的对象状态完全匹配:比如'g'和'w'对应的胜场、平场、场次数量是否真的对应2 1 1 0 0,如果你的业务逻辑里这些数字的含义(比如场次、胜、平、负、积分)有变化,要同步调整expected。 - 如果运行测试后还是不通过,可以先打印
actual的值,对比expected看具体哪里不一样(比如空格、数字是否正确),这样更容易定位问题。
内容的提问来源于stack exchange,提问作者aitsimhand
相关产品推荐
相关产品推荐

