JUnit4 fail()은 여기에 있는데 pass()는 어디에 있나요?
게 요.fail()
JUnit4 ju ju ju 。좋긴 한데, 그 부족함이pass()
라이브러리에는 없는 메서드입니다.것은은 왜???
해서 '어쩌다'를 사용할 수 assertTrue(true)
이치노
@Test
public void testSetterForeignWord(){
try {
card.setForeignWord("");
fail();
} catch (IncorrectArgumentForSetter ex){
}
// assertTrue(true);
}
테스트가 종료되고 합격하면 언제든지 스테이트먼트를 호출합니다.
한입니다.@Test
은 예상되는 예외를 ★★★★★★★★★★★★★★★★★★.pass()
합격한 수 실패했을 합니다). JUnit을 하는 것이 .을 이용하다또한 사람들이 이 테스트를 사용하는 것이 바람직하다고 생각하는 경우pass()
(예외 작성에 따른 오버헤드로 인해) 대량의 합격 테스트 스위트가 대폭 느려집니다.시험에 불합격하는 것이 표준이 되어서는 안 되기 때문에, 그러한 오버헤드가 있으면 큰 문제가 되지 않습니다.
예를 다음과 같이 다시 작성할 수 있습니다.
@Test(expected=IncorrectArgumentForSetter.class)
public void testSetterForeignWord("") throws Exception {
card.setForeignWord("");
}
자바어의 ★★★★★★★★★★★★★★★★★.IncorrectArgumentForSetter
★★★★★★★★★★★★★★★★★★★★★★★IllegalArgumentException
.
이 질문의 답변은 대부분 시대에 뒤떨어진 답변이기 때문에 갱신된 답변이 필요하다고 생각합니다.
우선 OP의 질문입니다.
JUnit's expected experience' 。그 예외는 어디에서나 제기될 수 있기 때문에 테스트에 합격할 수 있기 때문입니다.예외가 있는 만, 예외는, 완전하게 안 코드로 는, 「」(아피스)와 같이, 「.을 던져 버립니다.IllegalArgumentException
★★★★★★★★★★★★★★★★★」IllegalStateException
으로 발생시킬 수 있는 「 」는 「 」를 참조해 .@ExpectedException
주석을 사용하면 예외가 발생하는 잘못된 줄이어도 테스트가 녹색 막힘이 됩니다.
에 대비해 여기 많은 즉 '수업하다'를.assertThrows
★★★★
public class Exceptions {
private Exceptions(){}
public static void assertThrows(Class<? extends Exception> expectedException, Runnable actionThatShouldThrow){
try{
actionThatShouldThrow.run();
fail("expected action to throw " + expectedException.getSimpleName() + " but it did not.");
}
catch(Exception e){
if ( ! expectedException.isInstance(e)) {
throw e;
}
}
}
}
이 메서드는 예외가 발생하면 단순히 반환되므로 테스트에서 추가 어설션/검증을 수행할 수 있습니다.
Java 8 구문과 함께 당신의 테스트는 매우 좋아 보입니다.다음은 이 방법을 사용하는 당사의 모델에 대한 간단한 테스트 중 하나입니다.
@Test
public void when_input_lower_bound_is_greater_than_upper_bound_axis_should_throw_illegal_arg() {
//setup
AxisRange range = new AxisRange(0,100);
//act
Runnable act = () -> range.setLowerBound(200);
//assert
assertThrows(IllegalArgumentException.class, act);
}
이 테스트들은 "액트" 단계가 실제로 어떠한 행동도 하지 않기 때문에 조금 이상하지만, 나는 그 의미가 여전히 꽤 명확하다고 생각한다.
moven에는 mockito 스타일의 구문을 사용하여 예외가 발생함을 확인하는 catch-moven이라는 작은 라이브러리도 있습니다.예쁘긴 한데 다이나믹 프록시는 별로 안 좋아해요.즉, 구문이 매우 교묘하여 매력적인 상태로 남아 있습니다.
// given: an empty list
List myList = new ArrayList();
// when: we try to get the first element of the list
// then: catch the exception if any is thrown
catchException(myList).get(1);
// then: we expect an IndexOutOfBoundsException
assert caughtException() instanceof IndexOutOfBoundsException;
마지막으로 이 스레드에 도달하기 위해 마주친 상황에 대해서는 어떤 조건이 충족되면 테스트를 무시하는 방법이 있습니다.
현재 JNA라는 자바 네이티브 라이브러리 로딩 라이브러리를 통해 DLL을 호출하는 중입니다만, 빌드 서버는 우분투에 있습니다.저는 JUnit 테스트를 통해 이러한 발전을 추진하고 싶습니다. 이 테스트에서는 "유닛"과는 거리가 멀지만요.로컬 머신에서는 테스트를 실행하지만 ubuntu에서는 테스트는 무시합니다.JUnit 4라는 .Assume
:
@Test
public void when_asking_JNA_to_load_a_dll() throws URISyntaxException {
//this line will cause the test to be branded as "ignored" when "isCircleCI"
//(the machine running ubuntu is running this test) is true.
Assume.assumeFalse(BootstrappingUtilities.isCircleCI());
//an ignored test will typically result in some qualifier being put on the results,
//but will also not typically prevent a green-ton most platforms.
//setup
URL url = DLLTestFixture.class.getResource("USERDLL.dll");
String path = url.toURI().getPath();
path = path.substring(0, path.lastIndexOf("/"));
//act
NativeLibrary.addSearchPath("USERDLL", path);
Object dll = Native.loadLibrary("USERDLL", NativeCallbacks.EmptyInterface.class);
//assert
assertThat(dll).isNotNull();
}
★★★★★★★★를 찾고 .pass
JUnit에 대한 방법도 있기 때문에 일부 시나리오에서는 적용되지 않는 일부 테스트를 단락할 수 있습니다(순수 단위 테스트가 아닌 통합 테스트가 있습니다).을 사용하다
, 제 더 잘 .이 방법은 실제로 제 경우에는assumeTrue
★★★★
가정.assume True(isTestApplicable);
따라서 여기서 테스트는 isTestApplicable이 true인 경우에만 실행됩니다.그렇지 않으면 테스트는 무시됩니다.
테스트 코드에서 Assertion Failed Exception이 슬로우되지 않으면 유닛테스트 케이스가 통과하기 때문에 패스 메서드는 필요하지 않습니다.
fail() 메서드는 제어가 해당 지점에 도달하면 실제로 Assertion Failed Exception을 슬로우하여 test Case에 실패합니다.
저는 이 질문이 시험 실행 과정에 대한 약간의 오해에서 비롯된 것이라고 생각합니다.JUnit(및 기타 테스트도구)에서는 결과는 아사트콜이 아닌 메서드별로 카운트됩니다..assertX
실행되었습니다.
JUnit은 각 테스트 방법을 개별적으로 실행합니다.메서드가 정상적으로 반환되면 테스트는 "합격"으로 등록됩니다.예외가 발생하면 테스트가 "실패"로 등록됩니다.후자의 경우 1) JUnit 어설션 예외 2) 기타 모든 종류의 예외의 두 가지 서브 케이스가 가능합니다.첫 번째 케이스에서는 상태가 "실패"되고 두 번째 케이스에서는 "오류"가 됩니다.
서서 Assert
많은 는 어설션 때 할 수 있습니다.class 많 class 、 except class classionsionsionsionsions 。 말하면, 「 」입니다.Assert
n JUnit 의n의의의 의의의의의 。
를 들어, 이것은 '', '소스코드', '소스코드'입니다.assertEquals
GitHub:
/**
* Asserts that two Strings are equal.
*/
static public void assertEquals(String message, String expected, String actual) {
if (expected == null && actual == null) {
return;
}
if (expected != null && expected.equals(actual)) {
return;
}
String cleanMessage = message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, expected, actual);
}
보시다시피, 평등한 경우에는 아무 일도 일어나지 않고, 그렇지 않으면 탁월함이 던져집니다.
그래서:
assertEqual("Oh!", "Some string", "Another string!");
던지다ComparisonFailure
과 JUnit에 됩니다.
assertEqual("Oh?", "Same string", "Same string");
아무것도 하지 않습니다.
컨,,, 까까 like 같은 것.pass()
아무 것도 안 했으니까 말이 안 될 거야
언급URL : https://stackoverflow.com/questions/4036144/junit4-fail-is-here-but-where-is-pass
'programing' 카테고리의 다른 글
외부 스코프에서 정의된 섀도우 이름의 문제는 무엇입니까? (0) | 2022.10.02 |
---|---|
fs: 부모 폴더를 찾으려면 어떻게 해야 하나요? (0) | 2022.10.02 |
문자열에서 숫자가 아닌 문자( 마침표 및 쉼표 제외)를 제거합니다(숫자, 쉼표 및 마침표를 제외한 모든 문자 제거). (0) | 2022.10.02 |
File 객체를 사용하여 파일 디렉토리를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.02 |
로컬 컴퓨터의 MySQL 서비스가 시작된 후 중지되었습니다. (0) | 2022.10.02 |