Elasticsearch Spring Boot集成测试

我正在寻找将嵌入式Elasticsearch添加到我的Spring Boot集成测试中的方法。

我研究了elasticsearch集成测试,但是它不能与Spring Boot一起使用,因为两者都应使用不同的测试运行器。

不幸的是,我有一个下面的类测试,它不能正常工作:

java.lang.IllegalStateException:没有线程的上下文信息:Thread [id = 1,name = main,state

= RUNNABLE,group =

main]。该线程是否在com.carrotsearch.randomizedtesting.RandomizedRunner运行器上下文环境下运行?将@RunWith(class

com.carrotsearch.randomizedtesting.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);

}

}

是否有人有一些想法如何使它们运行或什么是替代方案?

回答:

实际上,您可以执行所需的操作而无需任何其他的Elasticsearch测试依赖项。这个想法基本上是创建一个嵌入式节点,然后使用NodeClient与之通信。

为此,我创建了自己的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;

}

}

然后,在spring配置中(我们称之为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...

}

以上是 Elasticsearch Spring Boot集成测试 的全部内容, 来源链接: utcz.com/qa/412982.html

回到顶部