我已经用 Java 构建了自己的堆栈实现,如下所示:
有一个接口“Stack”,它提供了基本功能(pop、push、peek 等)。然后我有 2 个具体的类,一个借助数组,另一个带有链表(在这种情况下如何并不重要)。
现在我的问题是:我想用 JUnit5 测试这个,因为你无法实例化接口,所以我必须为带有数组的类测试每个函数一次,为带有链表的类测试一次,所以代码不必要地长。有没有一种方法可以测试接口的所有功能或类似的东西?因为如果现在添加第三个实现,我就必须再次重写它。
我已经尝试过“参数化测试”,但没有取得任何进展。
我很乐意提供帮助!
测试接口 http://junit.org/junit5/docs/current/user-guide/#writing-tests-test-interfaces-and-default-methods将是另一种可能性。您可以将测试定义为接口的默认方法,并在每个 Stack 实现中实现该接口一次。每个实现都可以添加额外的测试等。
interface StackContractTests {
Stack newEmptyStack();
@Test
default void popsWhatWasLastPushed() {
Stack stack = newEmptyStack();
stack.push("foo");
assertEquals("foo", stack.pop());
}
@Test
default void cannotPopFromEmptyStack() {
Stack stack = newEmptyStack();
assertThrows(EmptyStackException.class, stack::pop);
}
}
public class ArrayListBasedStackTests implements StackContractTests {
@Override
public Stack newEmptyStack() {
return new ArrayListBasedStack();
}
}
public class LinkedListBasedStackTests implements StackContractTests {
@Override
public Stack newEmptyStack() {
return new LinkedListBasedStack();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)