2017-11-14 17 views
0

스프링 부트 프로젝트 중 하나에서 스프링 LDAP을 사용하려고하는데 여러 테스트를 실행할 때 '주소가 이미 사용 중입니다'오류가 발생합니다.Spring LDAP 임베디드 서버를 사용하여 테스트를 실행할 때 '주소가 이미 사용 중'입니다.

여기 샘플 프로젝트 로컬 복제 한 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class MyApplicationTests { 
    @Test 
    public void contextLoads() { 
    } 
} 

경우 : https://spring.io/guides/gs/authenticating-ldap/

... 그냥 확인하기 위해 일반적으로 봄 부팅에 의해 생성 된 상용구 테스트를 추가 올바르게 응용 프로그램 컨텍스트를로드하는 혼자 달리기,이 시험은 통과합니다. LdapAuthenticationTests와 MyApplicationTests를 함께 실행하자마자 위의 오류가 발생합니다.

비트를 디버깅 한 후 시스템에서 내장 서버의 두 번째 인스턴스를 생성하려고하기 때문에이 문제가 발생한다는 것을 알았습니다.

나는 매우 바보 같은 설정을 놓치고 있다고 확신한다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

웹 환경 유형과 기본 구성 클래스 (! SpringBootApplication이있는 클래스)를 지정하십시오.

@RunWith(SpringRunner.class) 
@SpringBootTest(
    classes = MyApplication.class, 
    webEnvironment = RANDOM_PORT 
) 
public class MyApplicationTests { 
    @Test 
    public void contextLoads() { 
    } 
} 

모든 테스트 클래스에 대해 이렇게하십시오. 좋아

+0

문제가 해결되지 않습니다. 나는 그것이 응용 프로그램 컨텍스트가로드 될 때마다 ldap 서버가 시작되기 때문에 생각합니다. SpringRunner의 경우일까요? 수동으로 @ AfterClass 주석이 달린 메소드를 수동으로 떼어 내면 문제가 해결 될지 확신하지 못합니다. 모든 테스트 클래스가 가지고 있어야하는 것처럼 성가 시겠지만 ... : –

+0

아, 네가 그걸 놓쳤다. 기본 임베디드 LDAP 구성을 사용 중이며 LDAP 포트가 무작위가 아니기 때문에 임베디드 LDAP가 다음 테스트 세트를 시작하기 전에 정리되지 않으면 문제가 발생할 수 있습니다. 당신은 병렬로 테스트를 실행합니다. 난뿐만 아니라 무작위 웹 포트 + 1처럼 ldap에 대한 무작위 포트를 설정 테스트 구성을 만들 것입니다. – Pytry

+0

나는 그것을 시도했다. 비록 그것은 소켓 바인딩 문제를 해결하여 수정 있지만 매번 새로운 포트,'.url()'을 사용하지 않고 유효한 설정을 찾을 수 없다. - 만약 URL을 전달해야한다면, 포트를 전달할 필요가있다. (무작위 적으로 생성 된 것처럼 알지 못한다.)). 비록 t를 사용하지 않을 때에 만 url이 전달되어야한다고 docs가 말하고 있지만 그는 임베디드 서버를 제공하며, 제공하는 예제에서 사용되며, 앱이 없어도 앱을 작동 할 수 없습니다. 또한 랜덤 포트를 할당함으로써 테스트 클래스 당 새로운 임베디드 서버가 시작된다는 의미입니까? (그것은 무서울 것이다) –

0

, 나는 내 테스트 클래스에 @DirtiesContext 주석을 추가하여 해결책을 찾은 것 같아요 :

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)