我应该用junit测试toString()吗?

时间:2012-09-21 10:05:40

标签: java junit tostring

此类测试是否有充分的理由存在?

5 个答案:

答案 0 :(得分:24)

有些类使用toString不仅仅是用户可读的信息字符串。示例包括StringBuilderStringWriter。在这种情况下,当然可以像其他任何商业价值方法一样测试方法。

即使在一般情况下,优良的做法是对可靠性进行抽烟测试toString(不会抛出异常)。您需要的最后一件事是由于执行不当toString而导致代码爆炸的日志声明。它发生在我身上好几次,由此产生的错误是最糟糕的,因为你甚至没有在源代码中看到toString调用 - 它隐含在日志语句中。

答案 1 :(得分:4)

问题不是我应该测试toString(),但是你关心toString()的结果吗?是用于某事吗?如果是,那么是的,测试一下。

如果方法被用于真实的东西,那么测试它。

答案 2 :(得分:3)

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

所以我对toString的propostal测试是:

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

它还增加了至少不坏的测试覆盖率。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

问题在于toString方法是绝对痛苦的测试,因为它们不是固定格式,也不是明确的测试方法。我建议您不要自己编写测试,而应使用ToStringVerifier

之类的库
@Test
public void testToString()
{
    ToStringVerifier.forClass(User.class).verify();
}