有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何确保arrayList中嵌套私有类的对象是我想要的对象?

这是我的类,我如何确保insert()方法正常工作

public class HeapQueue<P extends Comparable<? super P>, V>
    implements PriorityQueue<P, V> {

private final ArrayList<Pair<P, V>> pairs = new ArrayList<>();

private static class Pair<P extends Comparable<? super P>, V>
        implements Comparable<Pair<P, V>> {

    private final P priority;
    private final V value;

    public Pair(P priority, V value) {
        this.priority = priority;
        this.value = value;
    }

    @Override
    public int compareTo(Pair<P, V> o) {
        return priority.compareTo(o.priority);
    }

}

我尝试了这个测试,但我不能保证对象对<&燃气轮机;这是正确的

    @Test
public void insertPrioritatAltaTest() {

    HeapQueue hq = new HeapQueue();
    Priority p1 = null;
    try {
        p1 = new Priority("Alta");
    } catch (InvalidInputError iie) {

    }
    int a = 1;

    hq.insert(p1, a);
    assertEquals(hq.size(),1);

}

我试图创建getter来提取Pairs的价值,但Netbeans警告我,我正在通过公共API传递一个私有的东西,而且我没有获得它。 我不认为声明公共类对<&燃气轮机;是测试这一点的正确方法。也不使用extract()方法,我还没有对它进行测试


共 (1) 个答案

  1. # 1 楼答案

    测试类通常最简单的方法是使用它来测试用户将如何使用它,而不必太担心内部状态

    我认为你和我在一起是对的

    I tried creating getters to extract the value of Pairs

    虽然听起来好像是因为返回了私有类Pair<P,V>的实例而出错。从您的问题中,我不确定接口期望您的类的行为如何,但似乎您希望public V pop()或类似的函数能够删除并返回PriorityQueue中的下一项。注意,在这个示例中,您将返回一个V类型,而不是a Pair

    如果这是您正在寻找的行为,您的测试将类似于:

    @Test
    public void insertPrioritatAltaTest() {
        HeapQueue hq = new HeapQueue();
        hq.insert(new Priority("A"), 1);
        hq.insert(new Priority("C"), 2);
        hq.insert(new Priority("B"), 3);
    
        assertEquals(hq.pop(), 1);
        assertEquals(hq.pop(), 3);
        assertEquals(hq.pop(), 2);
    }