2014-12-04 13 views
0

我正在制作一个简单的单元测试器,其中我重复了(input, expected)值对,并检查计算的actual值是否等于expected列表<Entry<K,V>> - 比这更标准的东西?

这在一个简单的HashMap<INPUTTYPE, OUTPUTTYPE>中是完全可行的,但哈希逻辑是没有意义的,因为我要迭代所有的值,并且从不在地图中搜索,而保持测试用例的顺序(配对(input, expected))。

A List<Entry<K,V>>似乎很好,但在List中使用Map的内部组件似乎并不好。创建Pair类连接输入和预期似乎也不自然,因为Entry是同样的事情。

有没有一种方法使用支持这种数据的基础库中的现有Java类非常好?

+0

的地图可能是*不*你想要的东西;如果有多个具有相同期望值的测试会怎样? – 2014-12-04 09:15:38

+0

只要你想,创建一个入门课很容易。我认为自己创建自己的入门课是很自然的。 – javaHunter 2014-12-04 09:15:55

+1

为什么不使用'LinkedHashMap'? – 2014-12-04 09:16:34

回答

0

如果您不想创建任何新类,因为在核心java中没有标准元组/对,您可以使用2个数组,并将期望[i]与实际[i]进行比较。

1

一个简单的Pair可能会是你最好的选择:

/** 
* @author OldCurmudgeon 
* @param <P> 
* @param <Q> 
*/ 
public class Pair<P extends Comparable<P>, Q extends Comparable<Q>> implements Comparable<Pair<P, Q>> { 
    // Exposing p & q directly for simplicity. They are final so this is safe. 
    public final P p; 
    public final Q q; 

    public Pair(P p, Q q) { 
    this.p = p; 
    this.q = q; 
    } 

    public P getP() { 
    return p; 
    } 

    public Q getQ() { 
    return q; 
    } 

    @Override 
    public String toString() { 
    return "<" + (p == null ? "" : p.toString()) + "," + (q == null ? "" : q.toString()) + ">"; 
    } 

    @Override 
    public boolean equals(Object o) { 
    if (!(o instanceof Pair)) { 
     return false; 
    } 
    Pair it = (Pair) o; 
    return p == null ? it.p == null : p.equals(it.p) && q == null ? it.q == null : q.equals(it.q); 
    } 

    @Override 
    public int hashCode() { 
    int hash = 7; 
    hash = 97 * hash + (this.p != null ? this.p.hashCode() : 0); 
    hash = 97 * hash + (this.q != null ? this.q.hashCode() : 0); 
    return hash; 
    } 

    @Override 
    public int compareTo(Pair<P, Q> o) { 
    int diff = p == null ? (o.p == null ? 0 : -1) : p.compareTo(o.p); 
    if (diff == 0) { 
     diff = q == null ? (o.q == null ? 0 : -1) : q.compareTo(o.q); 
    } 
    return diff; 
    } 

} 
相关问题