12

这样的测试有充分的理由存在吗?

4

5 回答 5

28

有些类toString不仅仅用于用户可读的信息字符串。例子是StringBuilderStringWriter。在这种情况下,当然建议像任何其他业务价值方法一样测试该方法。

即使在一般情况下,最好toString对可靠性进行冒烟测试(不抛出异常)。您需要的最后一件事是由于执行不当而导致代码崩溃的日志语句toString。它发生在我身上好几次了,产生的错误是最糟糕的,因为你甚至没有toString在源代码中看到调用——它被隐式地隐藏在日志语句中。

于 2012-09-21T10:07:57.193 回答
4

问题不是我应该测试 toString(),而是你关心 toString() 的结果吗?它是用来做什么的吗?如果是这样,那么是的,测试它。

如果一种方法被用于真实的事情,那么就对其进行测试。

于 2012-09-21T10:06:49.677 回答
3

显而易见的答案是“不,这只是浪费时间”。但是对于许多类,首先是值包装器,toString 应该被重载并提供更多信息,而不仅仅是 org.package.ClassName@2be2befa

所以我对 toString 的建议测试是:

@Test
public final void testToString() {
    assertFalse(new MyClass().toString().contains("@"));
}

它还增加了测试收敛,至少还不错。

于 2012-09-21T10:05:57.730 回答
0

如果方法的结果对你很重要,你应该测试它,否则你可以忽略它。

于 2012-09-21T10:08:16.083 回答
0

我将反对一般建议,并说测试 toString 方法肯定有它的位置。我在日志上工作的应用程序很多,尤其是当您打开调试或跟踪级别日志时。如果我依靠日志来帮助识别错误,并且我的 POJO 中的某些字段不存在,因为某些开发人员忘记重新生成 toString 方法,这是一个巨大的挫折!

问题是 toString 方法测试起来非常痛苦,因为它们没有固定的格式或测试它的清晰方法。我建议不要自己编写测试,而是使用ToStringVerifier之类的库

@Test
public void testToString()
{
    ToStringVerifier.forClass(User.class).verify();
}
于 2018-08-28T10:49:07.943 回答