如何使用 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
应该抛出异常。
当合约需要与外部实体交互时,模拟对象就很有用了。这里不是这种情况。
我是 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
应该抛出异常。
当合约需要与外部实体交互时,模拟对象就很有用了。这里不是这种情况。