2017-10-06 1 views
0

을에 모의 TransportClient를 얻기 위해 어떻게 TestCampaign내가 여기 <code>MockTransportClient</code>를 얻기 위해 노력하고 있어요 ElasticSearch 버전 5.6.0을 사용하고 ElasticSearch

[2017-10-06T15:51:55,191][INFO ][o.e.p.PluginsService  ] [_client_] no modules loaded 
[2017-10-06T15:51:55,206][INFO ][o.e.p.PluginsService  ] [_client_] no plugins loaded 
[info] DeferredAbortedSuite: 
[info] Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite *** ABORTED *** 
[info] java.lang.IllegalStateException: running tests but failed to invoke RandomizedContext#getRandom 
[info] at org.elasticsearch.common.Randomness.get(Randomness.java:105) 
[info] at org.elasticsearch.client.transport.TransportClientNodesService.<init>(TransportClientNodesService.java:100) 
[info] at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:195) 
[info] at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265) 
[info] at org.elasticsearch.transport.MockTransportClient.<init>(MockTransportClient.java:42) 
[info] at org.elasticsearch.transport.MockTransportClient.<init>(MockTransportClient.java:34) 
[info] at testcontrollers.campaign.CampaignTest.mockClient(CampaignTest.scala:34) 
[info] at testcontrollers.campaign.TestCampaign.<init>(TestCampaign.scala:13) 
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
[info] ... 
[info] Cause: java.lang.reflect.InvocationTargetException: 
[info] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[info] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[info] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[info] at java.lang.reflect.Method.invoke(Method.java:498) 
[info] at org.elasticsearch.common.Randomness.get(Randomness.java:101) 
[info] at org.elasticsearch.client.transport.TransportClientNodesService.<init>(TransportClientNodesService.java:100) 
[info] at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:195) 
[info] at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265) 
[info] at org.elasticsearch.transport.MockTransportClient.<init>(MockTransportClient.java:42) 
[info] at org.elasticsearch.transport.MockTransportClient.<init>(MockTransportClient.java:34) 
[info] ... 
[info] Cause: java.lang.IllegalStateException: No context information for thread: Thread[id=10, name=pool-1-thread-1, state=RUNNABLE, group=main]. Is this thread running under a class com.carrotsearch.randomizedtesting.RandomizedRunner runner context? Add @RunWith(class com.carrotsearch.randomizedtesting.RandomizedRunner.class) to your test class. Make sure your code accesses random contexts within @BeforeClass and @AfterClass boundary (for example, static test class initializers are not permitted to access random contexts). 
[info] at com.carrotsearch.randomizedtesting.RandomizedContext.context(RandomizedContext.java:248) 
[info] at com.carrotsearch.randomizedtesting.RandomizedContext.current(RandomizedContext.java:134) 
[info] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[info] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[info] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[info] at java.lang.reflect.Method.invoke(Method.java:498) 
[info] at org.elasticsearch.common.Randomness.get(Randomness.java:101) 
[info] at org.elasticsearch.client.transport.TransportClientNodesService.<init>(TransportClientNodesService.java:100) 
[info] at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:195) 
[info] at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:265) 
을 실행하려고 할 때 예외를 얻고 코드

class CampaignTest extends ESTestCase { 
    def mockClient ={ 
    val clusterName = "elasticsearch" 
    val dataDir = Files.createTempDirectory("elasticsearch_data_test").toFile 
    val settings = Settings.builder() 
    .put("path.data", dataDir.toString) 
    .put("cluster.name", clusterName) 
    .build 

    val client = new MockTransportClient(settings); 
    println("got the client "+client) 
    client 
    } 
} 

class TestCampaign extends PlaySpec { 
    val campaignTest= new CampaignTest 
    val client = campaignTest.mockClient 
    info("client is "+client) 
} 

입니다

여기가 내가 build.sbt

"org.elasticsearch" % "elasticsearch" % "5.6.0", 
       "org.elasticsearch.client" % "transport" % "5.6.0", 
       "org.apache.lucene" % "lucene-expressions" % "6.6.0", 
       "org.apache.logging.log4j" % "log4j-core" % "2.9.0", 
       "org.apache.lucene" % "lucene-test-framework" % "6.6.0" % "test" , 
       "org.elasticsearch.test" % "framework" % "5.5.2" % "test", 

에 의존하다 elasticsearch 테스트는 randomizedtesting에 의존하고 random context을 주입하기위한 RandomizedRunner으로 실행해야한다

답변

0

때문에 실수하고. 예를 들어, RandomizedRunner 컨텍스트에서 테스트를 실행해야합니다.

RandomizedRunnerJUnit과 실행을 지원할 수 있기 때문에, 테스트에 대한 그래서는 class CampaignTest extends ESTestCaseJUnit하지 PlaySpec 실행을 지원해야하며,이 같은 JUnit 구문을 사용하여 테스트를 작성할 수 있습니다

class CampaignTest extends ESTestCase { 
    var client: Client = null 


    @Before def initClient(): Unit = { 
    val file = Files.createTempDirectory("tempESData") 
    val settings = Settings.builder() 
     .put("http.enabled", "false") 
     .put("path.data", file.toString()).build() 
    client = new MockTransportClient(settings) 
    } 
    @Test def myTest(): unit = { 
    ... 
    } 

    @After def closeClient(): Unit = { 
    client.close() //close client after test 
    client = null 
    } 
} 
+0

내가 시도 귀하의 솔루션과 항아리 점점이 지저분한 참조하십시오 https://stackoverflow.com/questions/46607281/elasticsearch-found-jar-hell-in-test-classpath – swaheed

관련 문제