如何使用 JUnit 对链表进行单元测试

how to unit test a linked list using JUnit

我是 TDD 的忠实粉丝,我通常在编写代码之前为我的大学作业编写测试用例。所以这是我的作业界面:

public interface SinglyLinkedList<E> {
    public void insertFirst(E e);
    public void insertAfter(E e, int index);
    public void removeFirst();
    public void remove(int index);
    public void removeAll();
    public E getFirst();
    public E get(int index);
    public int size();
    public String toString();
}

我写了整个测试用例,但感觉我写了糟糕的测试代码。我找不到一种方法来编写我的测试方法原子。 I.g。我无法在不使用 size() 的情况下测试 remove()。或者我无法找到一种方法来测试 insertFirst() 之后不调用 get() 。 据我所知,没有办法标记测试方法的依赖关系吗?有没有一种方法可以使用模拟来解决问题? 或者你会如何处理这个问题?

单元测试中的单元不必是单独的方法。用 contracts 来思考更有用。合同可以是给定某些参数,函数应该 return 某个值,但通常它们更复杂。

例如,在调用 insertFirst:

之后,可能有一个合同说
  • getFirst return你插入的对象
  • size return旧尺码加一
  • toString 的输出包括插入的对象

这些将被称为合同的后置条件。合同也可能有先决条件:例如,如果列表为空,则 remove 应该抛出异常。

当合约需要与外部实体交互时,模拟对象就很有用了。这里不是这种情况。