[SPRING] 포스트 구조로 봄 콩 테스트하기
SPRING포스트 구조로 봄 콩 테스트하기
나는 이와 비슷한 콩을 가지고있다 :
@Service
public class A {
@Autowired
private B b;
@PostConstruct
public void setup() {
b.call(param);
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { Application.class, Config.class })
@WebIntegrationTest(randomPort = true)
public class Test {
@Autowired
B B;
@Before
public void setUp() throws Exception {
when(b.call(any())).thenReturn("smth");
}
@Test
public void test() throws Exception {
// test...
}
}
문제는 PostConstruct가 테스트가 실행될 때 setUp 전에 호출된다는 것입니다.
해결법
-
==============================
1.A의 단위 테스트를 작성하려면 Spring을 사용하지 마십시오. 대신 A를 인스턴스화하고 B의 스텁 / 모의를 전달합니다 (생성자 삽입 또는 ReflectionTestUtils을 사용하여 비공개 필드를 설정).
A의 단위 테스트를 작성하려면 Spring을 사용하지 마십시오. 대신 A를 인스턴스화하고 B의 스텁 / 모의를 전달합니다 (생성자 삽입 또는 ReflectionTestUtils을 사용하여 비공개 필드를 설정).
예 :
@Service public class A { private final B b; @Autowired public A(B b) { this.b = b; } @PostConstruct public void setup() { b.call(param); } }
-
public class Test { @Test public void test() throws Exception { B b = mock(b); A a = new A(b); // write some tests for A } }
Spring을 사용해야 할 경우, 통합 테스트를 작성하기 위해 B를 스텁 / 모의로 대체하는 다른 애플리케이션 컨텍스트를 사용하십시오.
예를 들어 B가 Production 클래스에서 다음과 같이 인스턴스화되었다고 가정합니다.
@Configuration public class Production { @Bean public B b() { return new B(); } }
테스트를 위해 또 다른 @Configuration 클래스를 작성하십시오.
@Configuration public class Tests { @Bean public B b() { // using Mockito is just an example B b = Mockito.mock(B.class); Mockito.when(b).thenReturn("smth"); return b; } }
@SpringApplicationConfiguration 주석을 사용하여 테스트 할 때 참조하십시오.
@SpringApplicationConfiguration(classes = { Application.class, Tests.class })
from https://stackoverflow.com/questions/31587639/testing-spring-bean-with-post-construct by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 4에서 register-defaults = "false"와 같은 것은 무엇입니까? (0) | 2019.03.29 |
---|---|
[SPRING] 스프링 보안 로그 아웃이 j_spring_security_logout으로 이동합니다. (0) | 2019.03.29 |
[SPRING] 봄 데이터 Redis 만료 키 (0) | 2019.03.29 |
[SPRING] Proguard는 수업을 찾을 수 없다고 말하고 있습니다. (0) | 2019.03.29 |
[SPRING] applicationContext.xml에서 환경 변수 읽기 (0) | 2019.03.29 |