java - 如何在 Junit (Java) 中测试集合

标签 java junit hashset keyset

我需要实现一个稀疏图并对其进行一些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());
}

我的问题是,如何创建一个测试来检查我的集合中是否存在所有顶点?

我尝试将字符串与 keySet 进行比较,但错误是预期是一个字符串,但方法 assertEquals 获取了一个 keySet。

最佳答案

有很多方法可以对此进行测试。最基本的方法是为每个元素执行 contains,但 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;

关于java - 如何在 Junit (Java) 中测试集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30844789/

相关文章:

java - 如何使多个 REST 请求成为事务性/原子性的?

java - 当做可能可行的最简单的事情时,在 TDD 或 BDD 中命名方法

java - MockMvc:无法解析 andDo(print()) 中的打印方法

java - spring boot + junit + 重写的组件实例

Java:尽可能有效地比较哈希集

java - 在 glide 中处理 IllegalArgumentException ("You cannot start a load for a destroyed activity")的最佳方法是什么?

Java Config 入站文件适配器事务管理

java - Android onClick 函数不起作用

java - 哈希集在java中获取空字符串作为元素

java - 在 Java 中将数据从 HashSet 移动到 ArrayList