[SPRING] 매개 변수가있는 JUnit SpringJUnit4ClassRunner를 실행하는 방법
SPRING매개 변수가있는 JUnit SpringJUnit4ClassRunner를 실행하는 방법
중복 된 @RunWith 주석으로 인해 다음 코드가 유효하지 않습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(Parameterized.class)
@SpringApplicationConfiguration(classes = {ApplicationConfigTest.class})
public class ServiceTest {
}
하지만이 두 주석을 함께 사용하려면 어떻게해야합니까?
해결법
-
==============================
1.적어도 2 가지 옵션이 있습니다.
적어도 2 가지 옵션이 있습니다.
그래서 당신은 하나의 접근법을 구현하는 기본 클래스와 그것을 기반으로하는 모든 테스트를 가질 수 있습니다.
-
==============================
2.SpringClassRule과 SpringMethodRule을 사용할 수있다. Spring과 함께 제공된다.
SpringClassRule과 SpringMethodRule을 사용할 수있다. Spring과 함께 제공된다.
import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; @RunWith(Parameterized.class) @ContextConfiguration(...) public class MyTest { @ClassRule public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); ...
-
==============================
3.JUnit 4.12에는 Spring 4.2 이상이 필요없는 또 다른 솔루션이 있습니다.
JUnit 4.12에는 Spring 4.2 이상이 필요없는 또 다른 솔루션이 있습니다.
JUnit 4.12에서는 매개 변수화 된 테스트와 Spring injection을 결합 할 수있는 ParametersRunnerFactory를 소개합니다.
public class SpringParametersRunnerFactory implements ParametersRunnerFactory { @Override public Runner createRunnerForTestWithParameters(TestWithParameters test) throws InitializationError { final BlockJUnit4ClassRunnerWithParameters runnerWithParameters = new BlockJUnit4ClassRunnerWithParameters(test); return new SpringJUnit4ClassRunner(test.getTestClass().getJavaClass()) { @Override protected Object createTest() throws Exception { final Object testInstance = runnerWithParameters.createTest(); getTestContextManager().prepareTestInstance(testInstance); return testInstance; } }; } }
팩토리를 테스트 클래스에 추가하여 테스트 트랜잭션과 같은 전체 Spring 지원을 제공하고, 더티 컨텍스트와 서블릿 테스트를 다시 시작할 수있다.
@UseParametersRunnerFactory(SpringParametersRunnerFactory.class) @RunWith(Parameterized.class) @ContextConfiguration(locations = {"/test-context.xml", "/mvc-context.xml"}) @WebAppConfiguration @Transactional @TransactionConfiguration public class MyTransactionalTest { @Autowired private WebApplicationContext context; ... }
테스트 인스턴스에 매개 변수를 제공하기 위해 @Parameters 정적 메서드 내부에 Spring 컨텍스트가 필요한 경우 여기에서 내 대답을 참조하십시오. Spring을 사용하여 주입 된 필드에 Parameterized JUnit 테스트 러너를 사용하려면 어떻게해야합니까?
-
==============================
4.나에게 효과가 있었던 것은 "손으로"응용 프로그램 컨텍스트를 관리하는 @RunWith (Parameterized.class) 테스트 클래스를 갖는 것이었다.
나에게 효과가 있었던 것은 "손으로"응용 프로그램 컨텍스트를 관리하는 @RunWith (Parameterized.class) 테스트 클래스를 갖는 것이었다.
이를 위해 @ContextConfiguration에있는 동일한 문자열 컬렉션을 사용하여 응용 프로그램 컨텍스트를 만들었습니다. 그래서 대신에
@ContextConfiguration(locations = { "classpath:spring-config-file1.xml", "classpath:spring-config-file2.xml" })
나는 가지고 있었다.
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "classpath:spring-config-file1.xml", "classpath:spring-config-file2.xml" });
그리고 각 @Autowired에 대해 필자는 작성된 컨텍스트에서 수동으로 가져 왔습니다.
SomeClass someBean = ctx.getBean("someClassAutowiredBean", SomeClass.class);
마지막에 컨텍스트를 닫는 것을 잊지 마십시오.
((ClassPathXmlApplicationContext) ctx).close();
from https://stackoverflow.com/questions/28560734/how-to-run-junit-springjunit4classrunner-with-parametrized by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC - 폼에 여러 제출 버튼 (0) | 2019.03.02 |
---|---|
[SPRING] Java Dependency Injection : XML 또는 주석 (0) | 2019.03.02 |
[SPRING] 평신도의 봄 전파 예제 (0) | 2019.03.01 |
[SPRING] jsonpath가있는 회원 수를 계산 하시겠습니까? (0) | 2019.03.01 |
[SPRING] 다중 모듈 스프링 구성은 어떻게합니까? (0) | 2019.03.01 |