2016-08-31 3 views
2

私のテストは、次のようになります。 はカサンドラバネユニットで複数のテストを実行する方法

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:testContext.xml") 
@TestExecutionListeners(listeners = { CassandraUnitDependencyInjectionTestExecutionListener.class }, mergeMode = MergeMode.MERGE_WITH_DEFAULTS) 
@CassandraDataSet(value = "create_schema.cql", keyspace = "myKeyspace") 
@EmbeddedCassandra(timeout = 20000) 
public class MyItest { 

protected final Logger logger = LogManager.getLogger(getClass()); 

@Test 
public void test1() throws Exception { 
    System.out.println("Start1"); 
    ... 
    System.out.println("End1"); 
} 

@Test 
public void test2() throws Exception { 
    System.out.println("Start2"); 
    ... 
    System.out.println("End2"); 
} 

私は、これはそれがOK働く私のSTS 1つずつテストを実行

。しかし、私は一緒に両方のテストを実行したときに、私は例外だ:ログで

2016-08-31 13:15:37,962 [HANDSHAKE-/127.0.0.1] INFO - OutboundTcpConnection  - Handshaking version with /127.0.0.1 
Start1 
2016-08-31 13:15:39,326 [cassandraCluster-worker-5] WARN - Cluster     - Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once. Query='...' 
2016-08-31 13:15:39,331 [cassandraCluster-worker-6] WARN - Cluster     - Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once. Query='...' 
End1 
2016-08-31 13:15:39,348 [cassandraCluster-worker-1] WARN - Cluster     - Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once. Query='...' 
2016-08-31 13:15:41,401 [cassandraCluster-worker-3] WARN - Cluster     - Re-preparing already prepared query is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once. Query='...' 
2016-08-31 13:15:42,174 [main] INFO - DCAwareRoundRobinPolicy - Using data-center name 'datacenter1' for DCAwareRoundRobinPolicy (if this is incorrect, please provide the correct datacenter name with DCAwareRoundRobinPolicy constructor) 
2016-08-31 13:15:42,174 [main] INFO - Cluster     - New Cassandra host localhost/127.0.0.1:9142 added 
2016-08-31 13:15:42,191 [SharedPool-Worker-3] INFO - MigrationManager   - Drop Keyspace 'rob' 
2016-08-31 13:15:54,227 [main] ERROR - TestContextManager   - Caught exception while allowing TestExecutionListener [org.cassandraun[email protected]1a9e7c8] to prepare test instance [[email protected]] 
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9142 (com.datastax.driver.core.exceptions.OperationTimedOutException: [localhost/127.0.0.1:9142] Timed out waiting for server response)) 
    at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:84) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:37) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:64) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:39) ~[cassandra-driver-core-3.0.3.jar:?] 
    at org.cassandraunit.CQLDataLoader.initKeyspaceContext(CQLDataLoader.java:62) ~[cassandra-unit-3.0.0.1.jar:?] 
    at org.cassandraunit.CQLDataLoader.load(CQLDataLoader.java:31) ~[cassandra-unit-3.0.0.1.jar:?] 
    at org.cassandraunit.spring.AbstractCassandraUnitTestExecutionListener.startServer(AbstractCassandraUnitTestExecutionListener.java:70) ~[cassandra-unit-spring-3.0.0.1.jar:?] 
    at org.cassandraunit.spring.CassandraUnitDependencyInjectionTestExecutionListener.prepareTestInstance(CassandraUnitDependencyInjectionTestExecutionListener.java:21) ~[cassandra-unit-spring-3.0.0.1.jar:?] 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:?] 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:?] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:?] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) [.cp/:?] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:?] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:?] 
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9142 (com.datastax.driver.core.exceptions.OperationTimedOutException: [localhost/127.0.0.1:9142] Timed out waiting for server response)) 
    at com.datastax.driver.core.RequestHandler.reportNoMoreHosts(RequestHandler.java:207) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.RequestHandler.access$1000(RequestHandler.java:43) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution.sendRequest(RequestHandler.java:273) ~[cassandra-driver-core-3.0.3.jar:?] 
    at com.datastax.driver.core.RequestHandler$SpeculativeExecution$1.run(RequestHandler.java:396) ~[cassandra-driver-core-3.0.3.jar:?] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_66] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_66] 
    at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_66] 
2016-08-31 13:15:54,280 [main] INFO - CassandraHostRetryService - Downed Host Retry service started with queue size -1 and retry delay 10s 
2016-08-31 13:15:54,282 [main] INFO - JmxMonitor     - Registering JMX me.prettyprint.cassandra.service_TestCluster:ServiceType=hector,MonitorType=hector 
2016-08-31 13:15:54,355 [Thrift:2] INFO - MigrationManager   - Drop Keyspace 'rob' 
2016-08-31 13:16:03,475 [StorageServiceShutdownHook] INFO - ThriftServer    - Stop listening to thrift clients 
2016-08-31 13:16:03,476 [Thread-2] INFO - GenericApplicationContext - Closing [email protected]3d0f5: startup date [Wed Aug 31 13:15:37 CEST 2016]; root of context hierarchy 

を私はそれが1つのテストが成功した後、鍵空間をドロップして、いくつかのタイムアウトとNoHostAvailableExceptionがある見ることができます。このエラーをどのように修正する必要がありますか?

EDIT:CassandraUnitDependencyInjectionTestExecutionListener

私が見ることができます:

if (Boolean.TRUE.equals(testContext.getAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE))) { 
    if (LOGGER.isDebugEnabled()) { 
    LOGGER.debug("Cleaning and reloading server for test context [" + testContext + "]."); 
    } 
    cleanServer(); 
    startServer(testContext); 
} 

私は、このプロパティをfalseに変更するにはどうすればよいですか?

答えて

0

これは、cassandra-unitのデフォルト動作です。各テストの実行後にCassandraUnitTestExecutionListener.cleanServer()を呼び出し、すべての非システムキースペースを削除します。各テストの前にキースペースを作成するか、@CassandraDataSetアノテーションを使用することができます。お役に立てれば。

EDIT:詳細

私はカサンドラ・ユニットスプリング-2.1.9.2を使用していますが、私はクラスのすべてのテストを実行することができています。取得しているNoHostAvailableExceptionの問題は未解決の問題です。でも、それは私のためのオーバーヘッドである私は、各テストの後にクリーンkeyspacesと一緒に暮らすことができる

https://github.com/jsevellec/cassandra-unit/issues/158

https://github.com/jsevellec/cassandra-unit/issues/154

+0

HMを確認してください。しかし、どのようにタイムアウトを変更する必要がありますか?私はこのタイムアウトだと思います:@EmbeddedCassandra(timeout = 20000)は、これを開始するためのタイムアウトなので、私には役に立ちません。とにかく私はあなたのsollutionを試してみます – hudi

+0

詳細を私の答えを更新しました。 – abaghel

関連する問題