在ToString方法中将Object转换为特定的数据类型

时间:2013-09-01 23:05:00

标签: java unit-testing generics testing

因此,以下方法中的node.getValue()会返回E或通用数据类型。

public String toString() {
    StringBuilder linkedQueueAsString = new StringBuilder();
    linkedQueueAsString.append("< ");
    for (Link<E> node = this.front.getNextNode(); node != null; node = node.getNextNode())    
    {
        linkedQueueAsString.append(node.getValue()); // <=== Not working correctly
        linkedQueueAsString.append(" ");
    }
    linkedQueueAsString.append(">");
    return linkedQueueAsString.toString();
}

当我测试它时,我的测试失败了:

public void setUp() {
    this.queue1 = new LinkedQueue<Integer>();
    this.queue2 = new LinkedQueue<Integer>();
}

public void test_enqueue3IntegersAndThenDequeueThem() {
    this.queue2.enqueue(1);
    this.queue2.enqueue(2);
    this.queue2.enqueue(3);
    assertEquals(3, this.queue2.length());
    assertEquals("< 1 2 3 >", this.queue2.toString()); // <= ERROR since none of the numbers printed out

}

您可以看到我的个人实施链接队列here

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

对我来说,问题出在这一行:

 for (Link<E> node = this.front.getNextNode(); node != null; node = node.getNextNode()) {

由于你两次调用“getNextNode()”,你会错过一个元素而你的assertEquals将不匹配。