【问题标题】:How to test a toString() method?如何测试 toString() 方法?
【发布时间】:2017-05-06 03:30:53
【问题描述】:

如果我有这样的事情:

public class Set {

    private ArrayList<String> testList;
    private String testString;

    public Set() {
    }

    public void add(String testString) {
        testList.add(testString);
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(testString).append(System.getProperty("line.separator"));
        return sb.toString();
    }
}

如何在 main 方法中对此进行测试? 这是我迄今为止尝试过的......

Set test = new Set();
test.add("blah");
test.add("blahhh");
System.out.println(blah.toString());

我这样做正确吗?在高中上我的第一门 CS 课程,我们应该创建一个实现 toString() 方法的类。

【问题讨论】:

  • System.out.println(blah.toString()); blah 是什么?如果你没有声明blah,这会给你编译错误。像这样测试它:System.out.println(test);
  • 您的toString 将输出null。你永远不会设置testString 字段。
  • 你也可以使用System.lineSeparator()获取行分隔符。
  • 旁注:永远不要使用 Java 中已经存在的名称来命名您的类型。这会导致很多问题,例如:stackoverflow.com/questions/17462795/…
  • 您需要在您的add 方法中使用this.testString = testString; 设置testString 实例变量。

标签: java


【解决方案1】:

你创建了 Set 类的对象测试,现在就写吧:

System.out.println(test);

会给你你想要的结果,因为它会使用 toString 方法

并且您的 testString 未设置,因此 toString 将返回 null

【讨论】:

    【解决方案2】:

    您可以通过这种方式测试您的 toString,但为此您应该使用单元测试(请参阅junit)。

    为了测试你的类,你应该尝试不同类型的输入,看看如果有人输入了意外的东西会发生什么。

    您的代码中有错误:

    Set test = new Set();
    test.add("blah");
    test.add("blahhh");
    System.out.println(blah.toString());
    

    没有blah变量:

    System.out.println(test.toString());
    

    或者只是:

    System.out.println(test);
    

    出于学习目的,您应该在 toString 中做一些更有用的事情。您可以尝试使用余额、所有者数据(姓名、地址等)创建一个 Class 银行帐户,并在 toString 中创建一个有趣的输出。

    【讨论】:

      【解决方案3】:

      您在询问测试;然后不要去打印语句。 转向单元测试环境,比如 JUnit;并编写真正的测试:

      @Test
      public testToStringWithTwoEntries() {
        Set underTest = new Set();
        underTest.add(...
        assertThat(underTest.toString(), is("blah, blahhh"));
      }
      

      例如。备注:

      • assertThat() 只是各种不同断言方法中最强大的一种;并且易于使用;只需了解它需要 Hamcrest 匹配器才能工作(这就是 is() 调用的来源)
      • 您将您的班级命名为“Set”...糟糕的想法。已经有一个众所周知的接口 java.util.Set。您从不想重复使用这些名称。

      【讨论】:

        【解决方案4】:

        一个非常好的用于在模型类上测试 toString 的库:https://github.com/jparams/to-string-verifier

        示例:

        @Test
        public void myTest()
        {
            ToStringVerifier.forClass(Set.class).verify();
        }
        

        【讨论】:

          猜你喜欢
          • 2021-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 2016-07-21
          • 1970-01-01
          相关资源
          最近更新 更多