【问题标题】:Testing toString but it's failing?测试 toString 但它失败了?
【发布时间】:2014-03-17 00:46:54
【问题描述】:

使用此代码:

 public String toString()
{

    StringBuilder s = new StringBuilder();
    for (int i = 0; i < length; i++)
    {                     
        s.append(i).append(":").append(arr[i]).append(", ");                       
    }
    s.delete(s.length()-2, s.length()-1);
    return s.toString();
}

没有通过这个测试:

@Test
public void testToString()
{
    BetterArray<String> b = new BetterArray<String>();
    assertEquals("", b.toString());
    b.add("hello");
    assertEquals("0:hello", b.toString());
    b.add("bye");
    assertEquals("0:hello, 1:bye", b.toString());
    b.add("adios");
    assertEquals("0:hello, 1:bye, 2:adios", b.toString());
}

它需要以空字符串 ("") 开头,我这样做是否正确?我是 StringBuilder 的新手。我正在使用 s.delete 删除结尾的逗号和空格

【问题讨论】:

  • 错误信息会告诉你比较失败的确切位置。
  • “toString”函数应该显示什么?然后我们可以建议..
  • 尝试添加 FluentAssertions。只是更容易阅读和编写测试。您仍然会使用 Junit,但添加 FluentAssertions 会使编写断言变得有趣。

标签: java arrays string tostring


【解决方案1】:

这将在空字符串的情况下导致 java.lang.StringIndexOutOfBoundsException,因为您将没有逗号和尾随空格。

s.delete(s.length()-2, s.length()-1);

【讨论】:

  • 我添加了 if (!(s.equals(""))) { s.delete(s.length()-2, s.length()); } 仍然无法正常工作
  • 我们可以帮助我们看到什么。如果我们看不到您的其余代码,我们将无能为力。或者至少告诉我们哪个断言失败了,我们或许可以提供帮助。
  • 只有第一个失败,它是一个空字符串
  • StringBuilder b = new StringBuilder(); System.out.println(b.equals("")); /// 是假的!!所以这不会解决你的问题。您应该检查 s.length() > 0 而不是 !s.equals("")
  • ok 所以这段代码: public int indexOf(X s) { for (int i = 0; i b = new BetterArray(); for (int i = 0; i
【解决方案2】:

你只是删除逗号,删除行需要是s.delete(s.length()-2, s.length());

(按照惯例,范围的结束索引指向范围的最后一个元素之后的 1。例如,String.substring() 也是如此。)

【讨论】:

  • 感谢帮助,现在我的所有测试都通过了,除了第一个,我什至做到了 if(!(s.equals("")))
【解决方案3】:

这是一种不依赖任何数学技巧的方法。如果长度为零,则该方法返回一个空字符串。

public String toString() {
    StringBuilder s = new StringBuilder();

    for (int i = 0; i < length; i++) {
        s.append(i);
        s.append(":");
        s.append(arr[i]);
        if (i < (length - 1)) s.append(", ");
    }

    return s.toString();
}

【讨论】:

  • 哦,是的,聪明的,这是一个不记得删除跟踪字符的策略
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多