我正在使用 cassandra-unit-spring maven 依赖项为我的 spring-boot 应用程序设置集成测试。我能够运行调用 spring-boot 应用程序的测试,该应用程序又访问内存中嵌入式 Cassandra 数据库。
下面是我的测试类的代码
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({CassandraUnitDependencyInjectionTestExecutionListener.class, DependencyInjectionTestExecutionListener.class})
@CassandraDataSet(value = "cassandra/dbcreate.cql", keyspace = "test")
@EmbeddedCassandra
@SpringBootTest({"spring.data.cassandra.port=9142"})
public class IntegrationTest {
@Autowired
private TestRepository testRepository;
@Test
public void testFindById() {
Token token = generateRandomToken();
testRepository.insert(token);
Optional<Token> tokenStored = testRepository.findById(token.getKey());
compareReplayToken(token, tokenStored.get()); //This method does the assertions
}
}
此单个测试调用嵌入式 Cassandra 并根据cassandra/dbcreate.cql文件中的命令创建键空间和表。测试运行后,键空间和表将被删除。
到现在为止,还好。但是,如果我尝试在这个类中添加多个测试,这种方法会在每个测试开始时创建键空间和表,然后在测试运行后删除它们。
并且 dbcreate.cql 文件有很多命令来创建多个表,当这些命令为每个测试运行时,这让我的测试非常慢。
此外,当我尝试拥有多个这样的测试类时,这个问题就会成倍增加。
我能想到的可能解决方案是:
为每个测试类创建一个单独的 cql 文件,该文件具有仅与该类相关的有限 cql 命令- 同样,这并不能解决单个类中每个测试的数据库重置问题
我想为这个嵌入式 Cassandra 的一次启动运行我的所有集成测试,并且表和键空间应该只创建和删除一次以快速执行
这种问题的理想解决方案应该是什么?任何帮助深表感谢。谢谢!