使用JUnit4通用堆栈进行测试

时间:2018-10-30 14:56:22

标签: java generics stack nodes junit4

我正在尝试测试一个与Node 一起使用的名为SharedStack 的类,每次我调用方法push或pop时,都返回一个不可变的堆栈。内存是在堆栈之间共享的(如果我执行推操作,则会返回一个新堆栈,实际上,新堆栈中的topofStack只“拥有” topofStack,而其他部分则与原始堆栈共享)。

如何为测试此类?

这是SharedStack

public class SharedStack<E> implements Stack<E> {

  private final Node<E> topOfStack;

  private static class Node<E> {

    private final E elem;
    private final Node<E> next;

    public Node(E elem, Node<E> next) {
        this.elem = elem;
        this.next = next;
    }

    public E getElem() {
        return elem;
    }

    public Node<E> getNext() {
        return next;
    }
  }

  public SharedStack() {
    topOfStack = null;
  }

  public SharedStack(Node<E> topOfStack) {
    this.topOfStack = topOfStack;
  }

  @Override
  public Stack<E> push(E elem) {
    return new SharedStack<>(new Node<>(elem, topOfStack));
  }

  @Override
  public Stack<E> pop() throws StackError {
    if (isEmpty()) {
        throw new StackError("No elements in the stack");
    } else {
        return new SharedStack<>(new Node<>(null, topOfStack.getNext()));
    }
  }

  @Override
  public E top() throws StackError {
    if (isEmpty()) {
        throw new StackError("No elements in the stack");
    } else {
        return this.topOfStack.elem;
    }
  }

  @Override
  public boolean isEmpty() {
    if(this.topOfStack == null){
        return true;
    }else{
        return false;
    }
  }
}

我对的情况做了一些测试,例如:

@Test
public void SharedStackPop() throws StackError {
    Stack<Integer> s2 = new SharedStack<>();
    s2 = s2.push(7);
    s2 = s2.pop();
    assertEquals(null,s2.top());
}

我试图以与Integer情况相同的方式进行操作,但是我遇到一个错误,无法将任何元素添加到堆栈中。

0 个答案:

没有答案