我正在制作一个简单的单元测试器,我会迭代成对的(input, expected)
值,并检查计算的actual
值是否等于expected
。
这在一个简单的HashMap<INPUTTYPE, OUTPUTTYPE>
中是完全可行的,但是哈希逻辑是没有意义的,因为我将迭代所有值,并且从不在地图中搜索,而保持测试用例的顺序(成对(input, expected)
)。
List<Entry<K,V>>
似乎运行良好,但在List中使用Map的内部组件似乎并不好。创建Pair类来连接输入和期望也似乎不自然,因为Entry是相同的。
有没有办法在基础库中使用现有的java类来很好地支持这种数据?
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
如果您不想创建任何新类,您可以使用2个数组并将expected [i]与actual [i]进行比较,因为核心java中没有标准元组/对。