#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, т. пусто()); } работает лучше. Спасибо за ваш ответ!