Jar*_*ila 14 java integration-testing elasticsearch spring-boot
我正在寻找将嵌入式弹性搜索添加到我的春季启动集成测试的方法.
我看了弹性搜索集成测试,但它不能与spring boot一起使用,因为两者都应该使用不同的测试运行器.
我有一个类测试,不幸的是它不能用于错误:
java.lang.IllegalStateException:没有线程的上下文信息:Thread [id = 1,name = main,state = RUNNABLE,group = main].该线程是否在com.carrotsearch.randomizedtesting.RandomizedRunner类的运行上下文中运行?将@RunWith(类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);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有一些想法如何使它们运行或什么是替代?
npe*_*npe 10
您可以实际执行所需操作,而无需任何其他弹性搜索测试依赖项.这个想法基本上是创建一个嵌入式节点,然后使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在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" />
Run Code Online (Sandbox Code Playgroud)
然后你就可以在你的测试中自动装配客户端,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/integration-test-context.xml")
public abstract class AbstractElasticsearchIntegrationTest {
@Autowired
private Client elasticsearchClient;
// Your rests go here...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8383 次 |
| 最近记录: |