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

标签 java testing junit junit4

这是我的类(class),我如何确保方法 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);
    }

}

我试过这个测试,但我不能保证对象 Pair<> 是正确的。

    @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 警告我,我正在通过公共(public) API 传递私有(private)事物,而且我没有获得它。 我不认为声明公共(public)类 Pair<> 是测试它的正确方法。既不使用我还没有测试过的方法 extract()。

最佳答案

通常最简单的方法是按照用户的使用方式来测试您的类,而不必过多担心内部状态。

我认为你在正确的轨道上

I tried creating getters to extract the value of Pairs

尽管这听起来像是因为返回了私有(private)类的实例而出现错误 Pair<P,V> .从你的问题中我不确定接口(interface)期望你的类如何表现,但看起来你会想要一个 public V pop()或类似的功能,以便能够删除并返回 PriorityQueue 中的下一个项目.请注意,在此示例中,您将返回 V输入,不是 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);
}

关于java - 如何确保我的 arrayList 中嵌套私有(private)类的对象是我想要的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610406/

相关文章:

java - Android上如何使用Jsoup库登录网站

java - SQL 将列的每个值与另一个表中行的所有值进行比较

java - 在线程之间共享变量时如何避免并发错误?

java - 如何配置 gitkit cookie

android - JUnit 和安卓?

java - 我如何模拟服务以抛出异常返回列表的方法?

java - 使用 Spring 进行测试时的 URL 为空

google-chrome - Chrome args 和 prefs 似乎在 Protractor conf 中不起作用

macos - 支持手动执行测试的方法? (可以在 Mac 上使用)

.net - 用于运行测试和报告结果的框架用户界面