Тестовые примеры не будут работать при реализации моего собственного стека

#java #testing #junit #stack

Вопрос:

Поэтому нашей домашней задачей было реализовать стек на нашем won, а затем написать для него тестовые примеры. Это стек:

     import java.util.Vector;

class Stack<T> extends Vector<T> {
    private Vector<T> stack;

    Stack() {
        stack = new Vector<T>();
    }

    // returns false or true, given the stack is empty or not.
    public boolean isEmpty() {
        return stack.size() == 0;
    }

    //returns the top element of the stack without removing it.
    public T peek() {
        return stack.get(stack.size()-1);
    }

    //puts a new element to the top of the stack
    public void push(T element) {
        stack.add(element);
    }

    //returns and removes the top element of the stack
    public T pop() {
        return stack.get(stack.size()-1);
    }
}
 

И пока это мой тестовый класс.

 import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class StackTest {

    @Test
    void isEmpty() {
        stack s = new stack<Integer>;
        assertEquals(true, s.isEmpty());
    }

    @Test
    void peek() {
        Stack t = new Stack(1);
    }

    @Test
    void push() {
    }

    @Test
    void pop() {
    }

}
 

Мне действительно трудно понять, что не так с первыми двумя методами тестирования. У кого-нибудь еще есть идея?

Комментарии:

1. В первом способе stack пишется строчными буквами. Во втором методе вы вызываете конструктор Stack с помощью int, но этот конструктор не определен.

2. Второй метод тестирования на самом деле ничего не проверяет, он не имеет утверждения…

3. @deHaar обеспечение того, чтобы что-то происходило без исключений, является своего рода утверждением.

Ответ №1:

Это неправильно:

 //returns and removes the top element of the stack
public T pop() {
    return stack.get(stack.size()-1);
}
 

Вы не удаляете элемент, используйте remove вместо get

Другие ошибки:

 void isEmpty() {
    //Typo errors here, s is uppercase and missing parenthesis
    stack s = new stack<Integer>;
    assertEquals(true, s.isEmpty());
}

@Test
void peek() {
    //What does Stack(1) mean? There is no such constructor in class
    Stack t = new Stack(1);
}
 

Также:

 //If you already extend Vector you don't need a Vector field for the data
class Stack<T> extends Vector<T> {
    private Vector<T> stack;
 

Комментарии:

1. Большое спасибо. Эти исправления имеют большой смысл. Используя Stack(1), я попытался создать стек с номером 1 уже на нем. Но я думаю, что void push() { Стек t = новый стек(); t.push(1); assertEquals(false, т. пусто()); } работает лучше. Спасибо за ваш ответ!