Модульный тест с spring-boot-starter-test и cassandra

Мое веб-приложение с весенней загрузкой использует Cassandra DB через клиент Datastax, и соединение происходит следующим образом:

public CassandraManager(@Autowired CassandraConfig cassandraConfig) {
  config = cassandraConfig;
  cluster = Cluster.builder()
      .addContactPoint(config.getHost())
      .build();
  session = cluster.connect(config.getKeyspace());
}

Когда я запускаю свои модульные тесты, приложение весенней загрузки пытается загрузить компонент CassandraManager Bean и подключиться к базе данных Cassandra, которая не подходит для модульного теста, поскольку мне это не нужно. Я получаю следующую ошибку: [localhost/127.0.0.1:9042] Cannot connect)

Есть ли способ избежать загрузки этого Cassandra Manager Bean для запуска моего UT, поскольку им не нужно подключаться к БД? Это хорошая практика?


person louis amoros    schedule 09.03.2017    source источник


Ответы (1)


Вы можете попробовать что-то вроде ниже, что сработало для меня, предполагая, что вы используете spring-data-cassandra

Сначала мы создаем еще один класс конфигурации, который будет использоваться для тестов, не требующих подключения к cassandra. Это необходимо, так как нам нужно исключить класс CassandraDataAutoConfiguration. Бывший:

@SpringBootApplication(exclude = {CassandraDataAutoConfiguration.class})
public class NoCassandraConfig {
}

Затем мы будем использовать эту конфигурацию в наших тестах. Бывший:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = NoCassandraConfig.class)
public class UtilitiesTest {
/*  Lots of tests that does not need DB connection */
}

Вот и все.

person Rajkishan Swami    schedule 13.03.2018