【问题标题】:How to test collections in Junit (Java) [duplicate]如何在 Junit (Java) 中测试集合 [重复]
【发布时间】:2015-06-15 12:06:55
【问题描述】:

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

【问题讨论】:

    标签: java junit hashset keyset


    【解决方案1】:

    有很多测试方法。最基本的方法是为每个元素做一个包含,但 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;
    

    【讨论】:

    • 应该是“assertThat”。 (我无法编辑,因为编辑少于六个字符。)
    • hasItem 检查是否至少有一个指定项在结果中,containscontainsInAnyOrder 将检查所有项
    • @RomanVottner 好点;这也将删除大小检查
    • @user1121883,谢谢你的回答!无论如何,只是想知道,有没有办法在不使用 Hamcrest 的情况下检查它?如果没有,我该如何使用它?我正在使用 Eclipse(我是初学者 =))
    • @Diego just import: import static org.junit.Assert.assertThat;导入静态 org.hamcrest.CoreMatchers.hasItems;导入静态 org.hamcrest.Matchers.containsInAnyOrder;
    【解决方案2】:

    我会遍历图表并检查每个图表是否出现在预期值列表中。

    【讨论】:

      【解决方案3】:

      使用纯 Java 的 JUnit-Test 如下所示:

      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"));
      

      【讨论】:

        猜你喜欢
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 2017-04-12
        • 2021-06-16
        相关资源
        最近更新 更多