programing

탄성검색 Spring boot 통합 테스트

newstyles 2023. 6. 23. 21:47

탄성검색 Spring boot 통합 테스트

스프링 부츠 통합 테스트에 내장 탄성 검색을 추가하는 방법을 찾고 있습니다.

탄력적인 검색 통합 테스트를 살펴보았지만 스프링 부트와 함께 작동하지 않습니다. 둘 다 다른 테스트 러너를 사용해야 하기 때문입니다.

아래와 같은 수업 테스트가 있습니다. 유감스럽게도 오류가 발생하지 않습니다.

자바.java.java잘못된 상태 예외:스레드에 대한 컨텍스트 정보 없음:스레드[id=1, name=main, state=RUNNABLE, group=main].이 스레드가 com.carrotsearch.randomized testing 클래스에서 실행되고 있습니까?Randomized Runner 컨텍스트?@RunWith(클래스 com.carrotsearch.랜덤 테스트)를 추가합니다.RandomizedRunner.class)를 테스트 클래스에 추가합니다.코드가 @BeforeClass 및 @AfterClass 경계 내의 임의 컨텍스트에 액세스하는지 확인합니다(예: 정적 테스트 클래스 이니셜라이저는 임의 컨텍스트에 액세스할 수 없음).

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class TestExample extends ElasticsearchIntegrationTest {

    TestRestTemplate testRestTemplate = new TestRestTemplate();

    @Value("${local.server.port}")
    int port;

    @Test
    public void testOne(){
        ResponseEntity<String> results = testRestTemplate.getForEntity(String.format("http://localhost:%d/client/1", port), String.class);



     System.out.print(results);
    }

}

그들을 어떻게 운영할 것인지 또는 대안이 무엇인지 아는 사람이 있습니까?

실제로 추가적인 탄력적인 검색 테스트 종속성 없이 필요한 작업을 수행할 수 있습니다.이 개념은 기본적으로 포함된 노드를 생성한 다음 를 사용하여 노드와 통신하는 것입니다.

그것을 위해, 나는 나만의 것을 만들었습니다.EmbeddedElasticsearchServer다음과 같이 보이는 클래스:

public class EmbeddedElasticsearchServer implements InitializingBean {

    public EmbeddedElasticsearchServer() {

        ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder()
                .put("http.enabled", "false")
                .put("path.data", "target/elasticsearch-data");

        node = nodeBuilder()
                .local(true)
                .settings(elasticsearchSettings.build())
                .node();

        client = node.client();


    }

    @Override
    public void afterPropertiesSet() throws Exception {
         // Initialization stuff:
         // - create required indices
         // - define mappings
         // - populate with test data
    }

    public Client getClient() {
         return client;
    }

}

그러면, 스프링 구성에서 (그것을 부르자.integration-test-context.xml) 다음 작업을 수행:

<bean id="embeddedElasticsearchServer" 
      class="com.example.EmbeddedElasticsearchServer" />

<bean id="elasticsearchClient"
      class="org.elasticsearch.client.node.NodeClient" 
      factory-bean="embeddedElasticsearchServer" 
      factory-method="getClient" />

그런 다음 테스트에서 클라이언트를 다음과 같이 자동 배선할 수 있습니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/integration-test-context.xml")
public abstract class AbstractElasticsearchIntegrationTest {

    @Autowired
    private Client elasticsearchClient;

    // Your rests go here...

}

언급URL : https://stackoverflow.com/questions/30675654/elasticsearch-spring-boot-integration-test