Как проверить коллекции в Junit (Java)
Мне нужно реализовать разреженный граф и сделать некоторые тесты Junit на нем.
Это мой класс графика:
package graphs;
import java.util.Collection;
import java.util.HashMap;
public class SparseGraph<V, E> implements Graph<V, E> {
HashMap<V, HashMap<V, E>> node;
public SparseGraph() {
node = new HashMap<>();
}
@Override
public boolean addVertex(V vertex) {
if (hasVertex(vertex)) {
return false;
}
else {
node.put(vertex, new HashMap());
}
return true;
}
@Override
public boolean addEdge(V vertex1, V vertex2, E data) {
if (!hasVertex(vertex1) || !hasVertex(vertex2)) {
return false;
}
if (hasEdge(vertex1, vertex2) && getData(vertex1, vertex2).equals(data)) {
return false;
}
else if (hasEdge(vertex1, vertex2) && !getData(vertex1, vertex2).equals(data)) {
node.get(vertex1).put(vertex2, data);
return true;
}
else {
(node.get(vertex1)).put(vertex2, data);
}
return true;
}
@Override
public boolean hasVertex(V vertex) {
if (vertex == null) return false;
return (node.containsKey(vertex));
}
@Override
public boolean hasEdge(V vertex1, V vertex2) {
if (!hasVertex(vertex1) || !hasVertex(vertex2)) return false;
if (node.get(vertex1).containsKey(vertex2)) {
return true;
}
return false;
}
@Override
public E getData(V vertex1, V vertex2) {
if (!hasVertex(vertex1) || !hasVertex(vertex2)) return null;
return node.get(vertex1).get(vertex2);
}
@Override
public Collection<V> getVertices() {
return node.keySet();
}
@Override
public Collection<V> getNeighbors(V vertex) {
if (!hasVertex(vertex))
return null;
else
return node.get(vertex).keySet();
}
}// end class
и это мой тест:
public void testGetVertices() {
SparseGraph instance = new SparseGraph();
instance.addVertex("A");
instance.addVertex("B");
instance.addVertex("C");
instance.addVertex("D");
instance.addVertex("E");
//assertEquals("[D, E, A, B, C]",instance.getVertices());
}
У меня вопрос, как я могу создать тест, который проверяет наличие всех вершин в моей коллекции?
Я попытался сравнить строку с набором ключей, но ошибка состояла в том, что ожидается строка, но метод assertEquals получает набор ключей.
3 ответа
Есть много способов проверить это. Самый простой из них - создать содержимое для каждого элемента, но в JUnit есть более элегантные способы. Вы можете использовать assertThat() вместе с Hamcrest
assertThat(instance.getVertices(), containsInAnyOrder("A", "B", "C", "D", "E"));
использовать следующий импорт:
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.containsInAnyOrder;
Я бы перебрал график и проверил, появляется ли каждый из них в списке ожидаемых значений.
Тест JUnit с простой Java будет выглядеть так:
assertEquals(5, instance.getVertices().size());
assertTrue(instance.getVertices().hasVertex("A"));
assertTrue(instance.getVertices().hasVertex("B"));
assertTrue(instance.getVertices().hasVertex("C"));
assertTrue(instance.getVertices().hasVertex("D"));
assertTrue(instance.getVertices().hasVertex("E"));