0

我正在使用 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 的一次启动运行我的所有集成测试,并且表和键空间应该只创建和删除一次以快速执行

这种问题的理想解决方案应该是什么?任何帮助深表感谢。谢谢!

4

0 回答 0