대량의 코드에 대한 테스트 사례를 작성하고 싶습니다. JUnit @Rule
주석 기능에 대한 세부 정보를 알고 싶습니다 . 테스트 사례를 작성하는 데 사용할 수 있습니다. 간단한 예를 통해 기능에 대한 자세한 설명을 제공하는 유용한 답변이나 링크를 제공하십시오.
@Rule
가 다소 잘 설명되어 있음을 발견 했다. 특히 마지막 사건 "세부 정보의 순서"를 확인하라
대량의 코드에 대한 테스트 사례를 작성하고 싶습니다. JUnit @Rule
주석 기능에 대한 세부 정보를 알고 싶습니다 . 테스트 사례를 작성하는 데 사용할 수 있습니다. 간단한 예를 통해 기능에 대한 자세한 설명을 제공하는 유용한 답변이나 링크를 제공하십시오.
@Rule
가 다소 잘 설명되어 있음을 발견 했다. 특히 마지막 사건 "세부 정보의 순서"를 확인하라
답변:
규칙은 테스트 클래스 내의 모든 테스트에 적용되지만보다 일반적인 방식으로 추가 기능을 추가하는 데 사용됩니다.
예를 들어 ExternalResource 는 @Before
and 를 사용하지 않고도 테스트 메소드 전후에 코드를 실행합니다 @After
. 사용하여 ExternalResource
보다는 @Before
및@After
더 나은 코드 재사용을위한 기회를 제공합니다; 동일한 규칙을 서로 다른 두 테스트 클래스에서 사용할 수 있습니다.
설계는 다음을 기반으로합니다. JUnit의 인터셉터
자세한 정보는 JUnit 위키 : 규칙을 참조하십시오 .
Junit Rules는 AOP (aspect oriented programming)의 원칙에 따라 작동합니다. 테스트 방법을 가로 채어 특정 테스트 방법을 실행하기 전이나 후에 어떤 일을 할 수있는 기회를 제공합니다.
아래 코드의 예를 보자.
public class JunitRuleTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Test
public void testRule() throws IOException {
File newFolder = tempFolder.newFolder("Temp Folder");
assertTrue(newFolder.exists());
}
}
위의 테스트 방법을 실행할 때마다 임시 폴더가 생성되고 메서드 실행 후 삭제됩니다. Junit에서 제공하는 기본 규칙의 예입니다.
자체 규칙을 만들어 비슷한 동작을 수행 할 수도 있습니다. Junit은 자체 규칙 규칙을 작성하기 위해 구현할 수있는 TestRule 인터페이스를 제공합니다.
다음은 참조를위한 유용한 링크입니다.
작동 방식에 대한 설명 :
JUnit은 테스트 메소드를 Statement 오브젝트로 랩하여 명령문을 Execute()
실행 하고 테스트를 실행합니다. 그런 다음 statement.Execute()
JUnit은 직접 테스트를 실행 하는 대신 @Rule
주석 을 사용하여 Statement를 TestRule에 전달합니다 . TestRule의 "적용"함수는 테스트와 함께 Statement가 주어지면 새로운 Statement를 반환합니다. 새 Statement의 Execute()
메소드는 테스트 Statement의 execute 메소드를 호출하거나 여러 번 호출하거나 원하는대로 수행 할 수 있습니다 before and after
.
이제 JUnit에는 테스트를 실행하는 것 이상을 수행하는 새로운 Statement가 있으며, 마지막으로 Execute를 호출하기 전에 더 이상 규칙에 전달할 수 있습니다.
규칙은 일반적인 방식으로 각 테스트 방법의 동작을 향상시키는 데 사용됩니다. Junit 규칙은 테스트 메소드를 가로 채서 테스트 메소드가 실행을 시작하기 전과 테스트 메소드가 실행 된 후 무언가를 수행 할 수 있도록합니다.
예를 들어 @Timeout 규칙을 사용하면 모든 테스트에 대한 시간 초과를 설정할 수 있습니다.
public class TestApp {
@Rule
public Timeout globalTimeout = new Timeout(20, TimeUnit.MILLISECONDS);
......
......
}
@TemporaryFolder 규칙은 임시 폴더, 파일을 만드는 데 사용됩니다. 테스트 메소드가 실행될 때마다 임시 폴더가 작성되고 메소드 실행 후 삭제됩니다.
public class TempFolderTest {
@Rule
public TemporaryFolder tempFolder= new TemporaryFolder();
@Test
public void testTempFolder() throws IOException {
File folder = tempFolder.newFolder("demos");
File file = tempFolder.newFile("Hello.txt");
assertEquals(folder.getName(), "demos");
assertEquals(file.getName(), "Hello.txt");
}
}
이 링크 에서 junit이 제공 한 내장 규칙의 예를 볼 수 있습니다 .