반응형
JUnit을 사용한 내부 클래스의 테스트 케이스
클래스 당 테스트 클래스와 메서드 당 내부 클래스가있는 구조화 단위 테스트 에 대해 읽었습니다 . 테스트를 구성하는 편리한 방법 인 것 같아서 Java 프로젝트에서 시도했습니다. 그러나 내부 클래스의 테스트는 전혀 선택되지 않는 것 같습니다.
나는 대략 다음과 같이했다.
public class DogTests
{
public class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
JUnit이이를 지원하지 않거나 내가 잘못하고 있습니까?
public class ServicesTest extends TestBase {
public static class TestLogon{
@Test
public void testLogonRequest() throws Exception {
//My Test Code
}
}
}
내부 클래스를 정적으로 만드는 것이 저에게 효과적입니다.
클래스를으로 주석 처리해야하며 @RunWith(Enclosed.class)
다른 사람들이 말했듯이 내부 클래스를 정적으로 선언해야합니다.
@RunWith(Enclosed.class)
public class DogTests
{
public static class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public static class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
답변 중 일부는 JUnit의 이전 버전에 대한 것일 수 있습니다. JUnit 4에서 이것은 나를 위해 일했습니다.
@RunWith(DogTests.class)
@SuiteClasses({ DogTests.BarkTests.class, DogTests.EatTests.class })
public class DogTests extends Suite
{
public DogTests(Class<?> klass, RunnerBuilder builder) throws InitializationError {
super(klass, builder);
}
public static class BarkTests
{
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
public static class EatTests
{
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
JUnit 5에서는 비 정적 내부 클래스를 @Nested
다음 과 같이 표시하기 만하면됩니다 .
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class DogTests {
@Nested
public class BarkTests {
@Test
public void quietBark_IsAtLeastAudible() { }
@Test
public void loudBark_ScaresAveragePerson() { }
}
@Nested
public class EatTests {
@Test
public void normalFood_IsEaten() { }
@Test
public void badFood_ThrowsFit() { }
}
}
I've had success with Nitor Creation's Nested Runner as well.
How to use Nitor Creation's Nested Runner
There is a post explaining it here:
Add this dependency:
<dependency>
<groupId>com.nitorcreations</groupId>
<artifactId>junit-runners</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
And a @RunWith
to your test:
import com.nitorcreations.junit.runners.NestedRunner
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
@RunWith(NestedRunner.class)
public class RepositoryUserServiceTest {
public class RegisterNewUserAccount {
public class WhenUserUsesSocialSignIn {
public class WhenUserAccountIsFoundWithEmailAddress {
@Test
public void shouldThrowException() {
assertTrue(true);
}
}
}
}
}
PS: The example code has been taken and modified from the above blog post
참고URL : https://stackoverflow.com/questions/8758294/test-cases-in-inner-classes-with-junit
반응형
'Development Tip' 카테고리의 다른 글
KnockoutJS의 숫자 서식 규칙 (0) | 2020.12.03 |
---|---|
연결 호출을위한 모의 또는 스텁 (0) | 2020.12.03 |
자바 스크립트 개체 키 이름 가져 오기 (0) | 2020.12.03 |
pip는 setup.py의 dependency_links를 무시합니다. (0) | 2020.12.03 |
전체 diff 출력을 얻기 위해 nose에서 self.maxDiff를 설정하는 방법은 무엇입니까? (0) | 2020.12.03 |