과제에 대한 테스트를 만들면서 이상한 점을 발견했습니다. AssertionError
.왜이 어설 션인지 어설 션은 AssertionError를 던집니까?
List<Integer> elements= new ArrayList<Integer>();
elements.add(1);
elements.add(2);
elements.add(3);
Permutation p2 = new Permutation(elements);
Permutation p1 = new Permutation(elements);
assertThat(p2, equalTo(p1));
Permutation.java :
public class Permutation {
private List<Integer> elements;
public Permutation(List<Integer> elements) {
this.elements = elements;
}
public boolean equals(Permutacion permutation){
if (this.elements.size() != permutation.elements.size()){
return false;
}
Iterator<Integer> iterThis = this.elements.iterator();
Iterator<Integer> iterOther = permutation.elements.iterator();
while (iterThis.hasNext() && iterOther.hasNext()){
if (iterThis.next() != iterOther.next()){
return false;
}
}
return true;
}
모두의 JUnit과 hamcrest 소스 코드를 파고 난 단지 전화 assertThat 그 JUnit을 발견 한 내가 간단한 경우에 도착할 때까지
나는 그것을 변경 매처에서 일치합니다.
이 경우의 일치 방법은 :
public boolean matches(Object arg) {
return areEqual(arg, object);
}
private static boolean areEqual(Object o1, Object o2) {
if (o1 == null) {
return o2 == null;
} else if (o2 != null && isArray(o1)) {
return isArray(o2) && areArraysEqual(o1, o2);
} else {
return o1.equals(o2);
}
}
인수는 "P2"이어야하고 객체 "P1"해야하는 경우. , 디버거 검사를 사용하여, areEqual 방법의 비교
결과를 (그것은 Hamcrest repository에서 찾아 볼 수있다)
은 다음과 같습니다 당신이 볼 수있는
"p2 == null" false
"p1 != null" true
"p2.getClass().isArray()" false
"p2.equals(p1)" true
"equalTo(p1).matches(p2)" false
그래서, 코드가 마지막에 도달한다 다른 상태와 당신의 도움
,536에 대한true
(
p2.equals(p1)
), 그러나
equalTo(p1).matches(p2)
반환
false
감사를 반환
죄송합니다. 질문에 추가하는 것을 잊었지만 가지고 있습니다. 어쨌든, 내가 게시 한 결과는 이클립스의 표현식 창에서 나온 것인데, 단지 추측이 아닙니다. –
@JuanGuerrero : 아니요, 당신은 * equals (Object)를 오버라이드하지 않았습니다. 편집 할 것입니다. –
고마워, 효과가 있었다. 귀하의 답변을 해결 된 것으로 표시하겠습니다. –