[java] JUnit이 assertNotEquals 메소드를 제공하지 않는 이유는 무엇입니까?

JUnit 4가 왜 메소드를 제공 assertEquals(foo,bar)하지만 제공 하지 않는지 아는 사람이 assertNotEqual(foo,bar)있습니까?

을 제공하고 assertNotSame(에 해당 assertSame)assertFalse (에 해당하는 assertTrue그들이 포함 귀찮게하지 않았다 이상한 것 같다, 그래서) assertNotEqual.

그건 그렇고, JUnit-addons가 내가 찾고있는 방법을 제공한다는 것을 알고 있습니다. 나는 단지 호기심을 요구하고 있습니다.



답변

assertThat()모든 종류의 부정을 쉽게 설명 할 수 있고 어설 션이 실패한 경우 예상 한 것과 설명을 자동으로 작성할 수 있는 최신 스타일 어설트 를 사용하는 것이 좋습니다 .

assertThat(objectUnderTest, is(not(someOtherObject)));
assertThat(objectUnderTest, not(someOtherObject));
assertThat(objectUnderTest, not(equalTo(someOtherObject)));

세 가지 옵션은 모두 동일하므로 가장 읽기 쉬운 옵션을 선택하십시오.

메소드의 단순 이름을 사용하고 (이 시제 구문이 작동하도록하려면) 다음 가져 오기가 필요합니다.

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;


답변

assertNotEqualsJUnit을 4.11가 : https://github.com/junit-team/junit/blob/master/doc/ReleaseNotes4.11.md#improvements-to-assert-and-assume

import static org.junit.Assert.assertNotEquals;


답변

나도 똑같아 Assert API는 그리 대칭 적이 지 않습니다. 객체가 동일한 지 테스트하기 위해 다음을 제공합니다.assertSameassertNotSame .

물론 작성하기에는 너무 길지 않습니다.

assertFalse(foo.equals(bar));

이러한 주장으로 유감스럽게도 출력의 유익한 부분은 테스트 방법의 이름이므로 설명 메시지를 별도로 작성해야합니다.

String msg = "Expected <" + foo + "> to be unequal to <" + bar +">";
assertFalse(msg, foo.equals(bar));

물론 너무 지루해서 자신의 것을 굴리는 것이 좋습니다 assertNotEqual. 다행히 향후 JUnit의 일부가 될 것입니다. JUnit issue 22


답변

assertNotEqual이 없다는 것은 실제로 비대칭이며 JUnit을 조금 덜 배우게 만든다고 주장합니다. 메소드를 추가 할 때 API의 복잡성이 줄어든다는 사실을 명심하십시오. 대칭은 더 큰 공간을 지배하는 데 도움이됩니다. 내 생각 엔 생략이 필요한 이유는이 방법을 요구하는 사람들이 너무 적기 때문일 수있다. 그러나 assertFalse조차 존재하지 않았던 때를 기억합니다. 그러므로 나는 그 방법이 어려운 방법이 아니라면 결국 그 방법이 추가 될 것이라는 긍정적 인 기대를 가지고있다. 비록 많은 해결 방법, 심지어 우아한 해결 방법이 있음을 인정하지만.


답변

나는이 파티에 꽤 늦게오고 있지만 나는 그 형태를 발견했다.

static void assertTrue(java.lang.String message, boolean condition) 

대부분의 ‘같지 않은’경우에 작동하도록 만들 수 있습니다.

int status = doSomething() ; // expected to return 123
assertTrue("doSomething() returned unexpected status", status != 123 ) ;


답변

jUnit4.12를 사용하여 Java 8 환경에서 JUnit을 작업 중입니다.

나를 위해 : 컴파일러는 내가 사용했을 때도 assertNotEquals 메소드를 찾을 수 없었습니다.
import org.junit.Assert;

그래서 나는 변경
assertNotEquals("addb", string);

Assert.assertNotEquals("addb", string);

따라서 assertNotEqual인식되지 않는 문제에 직면하고 있다면 문제를 Assert.assertNotEquals(,);해결 하도록 변경하십시오.


답변

사람들이 assertNotEquals ()를 원했던 명백한 이유는 내장 객체를 먼저 날아간 객체로 변환하지 않고 비교하는 것이 었습니다.

자세한 예 :

....
assertThat(1, not(equalTo(Integer.valueOf(winningBidderId))));
....

vs.

assertNotEqual(1, winningBidderId);

슬프게도 Eclipse에는 기본적으로 JUnit 4.11이 포함되어 있지 않으므로 자세한 정보가 필요합니다.

주의 사항 ‘1’을 Integer.valueOf ()에 싸야한다고 생각하지 않지만 .NET에서 새로 반환되었으므로 정확성에 의존하지 않습니다.