1

단위 테스트, 버전 1.5.4에서 구성 클래스를 제외 : 내 통합 테스트에서봄 부팅 1.5.4하십시오 MongoDB를 구성 클래스와, 내가 봄 부트 프로젝트가

@Configuration 
public class MongoConfig { 

@Value("${spring.data.mongo.client.uri:mongodb://localhost:27017/database}") 
private String mongoURI; 

@Bean 
public MongoDbFactory mongoFactory() throws UnknownHostException{ 
    return new SimpleMongoDbFactory(new MongoClientURI(mongoURI)); 
} 

@Bean 
public MongoTemplate mongoTemplate() throws UnknownHostException, MongoException{ 
    return new MongoTemplate(mongoFactory()); 
} 
} 

을 내가 임베디드 몽고를 사용하려면 (https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo).

문제는 MongoDb 구성 클래스가 Embedded mongo의 초기화 전에 시작되어 데이터베이스에 연결하려고하므로 내 테스트가 실패합니다. MongoConfig 클래스를 제거하면 모든 테스트가 잘 수행됩니다.

테스트 실행에서만 어떻게 제외 할 수 있습니까?

+0

나는이게 당신의 질문에 관한 것이 아니라, testContainers : https://www.testcontainers.org/를 살펴 보시기 바랍니다. 제가 테스트 (주로 통합 테스트)에 사용하는 솔루션입니다. 작은 튜토리얼입니다. : https://areguig.github.io/test-springboot-apps-using-testContainers-and-spock/ –

답변

1

여기에 대한 답변을 참조하십시오. 구성을 제외하는 두 가지 방법이 있습니다.

Spring boot: apply @Configuration to certain package only

업데이트 1 :

또는, 내가 생각할 수있는 가장 효율적인 방법이 TestConfiguration 클래스를 정의 봄 프로파일을 사용하여 테스트

에 대한 프로파일을로드하는 것입니다 테스트 클래스를 가져옵니다. EmbeddedMongoAutoConfiguration 여기에 상세한 답변을 참조하시기 바랍니다 들어 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Import(MyTestConfiguration.class) 
public class MyTests { 

    @Test 
    public void exampleTest() { 
     ... 
    } 

} 

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-detecting-config

업데이트 2

.

How do you configure Embedded MongDB for integration testing in a Spring Boot application?

+0

단위 테스트 용으로 만 기본 응용 프로그램 클래스를 변경하고 싶지는 않습니다. – sintetico82

+0

@Import (MyTestsConfiguration.class)는 좋은 해결책이지만, 테스트를 위해 쓸모없는 클래스를로드하지 않는 시스템을 발견했습니다. – sintetico82

+0

Proble은 * EmbeddedMongoAutoConfiguration.class를 활성화하기 위해 * MyTestsConfiguration.class *가 될 줄을 모릅니다. * – sintetico82

0

나는 내 테스트 클래스에이 구성 그것을 해결 :

@RunWith(SpringRunner.class) 
@ComponentScan({"it.app.server.dal","it.app.server.listener"}) 
@DataMongoTest() //mongoDB 
public class ListenerTests { 
    ... 
} 

주석 @DataMongoTest() 내 Embbedded MongoDB를로드하고 @ComponentScan와 난 그냥를로드 할 수 있습니다 서비스 및 저장소가 필요합니다.

+0

mongodb에 액세스하는 컨트롤러를 테스트하려면이 솔루션이 작동하지 않습니다. – sintetico82