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

rps*_*ger 3 java tdd 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*oni 5

单元测试中的单元不必是单独的方法。从合同的角度考虑更有用。合约可以是给定某些参数的函数应该返回某个值,但通常它们更复杂。

例如,可能有一个合同说在调用后insertFirst

  • getFirst 返回你插入的对象
  • size 返回旧尺寸加一
  • 的输出toString包括插入的对象

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

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