【问题标题】:how to write a junit test case for a toString() method [closed]如何为 toString() 方法编写 junit 测试用例 [关闭]
【发布时间】:2015-01-16 11:58:28
【问题描述】:

非常需要tdd、junit、测试等

我该如何测试?

public String toString()
    {
        StringBuilder builder = new StringBuilder();
        builder.append(SalesExceptionHandlerImpl.class.getName() + " [");
        builder.append("toString()=");
        builder.append(super.toString());
        builder.append(", getClass()=");
        builder.append(getClass());
        builder.append(", hashCode()=");
        builder.append(hashCode());
        builder.append("]");
        return builder.toString();
    }

代码尝试:

public class RMSalesExceptionHandlerImplTest {

    @Test
    public void toStringReturnAnEmptyString(){
        SalesExceptionHandlerImpl salesExceptionHandlerImpl = new SalesExceptionHandlerImpl();
        assert.areEqual(salesExceptionHandlerImpl.toString(), "");
    }
}

【问题讨论】:

    标签: java unit-testing junit tdd


    【解决方案1】:

    如果你知道你的方法的结果,你就不会关心它的实现。 如果你的函数是一个 toString,你必须简单地测试你的函数的结果。

    public void testToString() {
        String result = "myResultThatIMustObtain";
        assertEquals(myInstance.toString(), result);
    
    }
    

    【讨论】:

      【解决方案2】:

      你迟到了。使用 TDD,您首先编写单元测试,然后执行实现。您已经有实现但没有测试存在。您可以编写缺少的单元测试(那很好),或者您可以忘记当前的实现并尝试 test-first 方法(如 TDD)。

      在 test first 中,您首先从非常简单的测试开始。对于toString() 方法,它可能类似于(使用JUnit for assertions):

      public void toString_returnsEmptyString()
      {
          SomeClass classUnderTest = new SomeClass();
      
          assertEquals(classUnderTest.toString(), "");
      }
      

      你为什么首先需要这样的测试?这可能看起来很愚蠢,但它可以确保您可以毫无问题地创建测试环境(SomeClass 实例)。这一点非常重要,因为您希望在处理更复杂的测试和更复杂的问题时避免分心。

      一旦确定您可以创建对象并且可以返回一些字符串,您就可以添加更多测试。喜欢:

      public void toString_returnsStringWithSuperClassToStringEmbedded()
      {
          SomeClass classUnderTest = new SomeClass();
      
          assertThat(classUnderTest.toString(), contains("This is super's toString"));
      }
      

      然后添加适当的实现。

      下一步是停止编写测试并检查您是否可以重构任何东西(遵循Red-Green-Refactor 口头禅)。在这个阶段,很可能不会。这意味着您添加更多测试(getClass、hashCode、格式化等)。冲洗并重复,直到您对测试和实施都感到满意为止。

      最终,你会得到一堆测试。也许其中一些是多余的,您必须删除它们(就像您编写的第一个测试一样)。也许其中一些可以合并到单个测试中。也许您只需要一项测试来验证生成的字符串是否符合您的预期。但这就是 TDD 的意义——您的测试和实现通常会不断发展,直到它们达到最适合您要求的形式。

      【讨论】:

      • 你好。这似乎很有帮助,如果您能帮我解决这个问题,我会将其标记为正确。我使用的代码在我的问题中已编辑。但是“assert.areEqual”用红色下划线表示该方法对于 RMSalesExceptionHandlerImpl 类型(我的班级名称)未定义。有什么想法吗?
      • @BlackMagma:应该是assertEquals,假设您使用 JUnit。修复了代码示例。
      • 仅供参考,assertNotNull 在这种情况下效果最好。 assertEquals 失败。感谢您的帮助
      猜你喜欢
      • 2023-02-17
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多