У меня есть проект с пружиной MVC v5.0.8, Java 8
Я сделал несколько интеграционных тестов от контроллера к базе данных, и теперь я хочу добавить тест, который будет проверять, что произойдет, если первая часть транзакционного поведения не удалась. Я гарантирую, что транзакция будет эффективно откатываться.
Итак, я должен переопределить DAO, чтобы он потерпел неудачу. После некоторых исследований возникла простая идея: переопределить конфигурацию пружины для этого теста: Переопределение бина с автопроводкой в модульных тестах
Мой тест теперь работает нормально, но проблема в том, что эта конфигурация используется совместно с другим тестом из других классов, даже если он находится в одном классе. Как я могу сделать это конкретным для этого теста?
(Если создание b завершилось неудачно, a необходимо откатить)
Неудачный тест:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@EnableWebMvc
@Sql({"/sqlfiles/clean-data.sql"})
public class AControllerFailDaoIt {
@Configuration
static class ConfigFailDao extends ApplicationConfiguration{
@Bean
@Primary
public BDao getBDao() {
return new BDao() {
//Overriding method to make it fail
};
}
}
@Autowired
AController aController;
@Autowired
ADao aDao;
@Test
public void should_not_create_a_if_b_failed(){
//creation of a
//assert nor a nor b are created
}
}
Номинальный тестовый набор:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@EnableWebMvc
@ContextConfiguration(classes = {ApplicationConfiguration.class, CustomWebAppConfiguration.class})
@Sql({"/sqlfiles/clean-data.sql"}) //"/sqlfiles/account-test.sql"
public class AControllerIT {
@Autowired
AController aController;
@Autowired
ADao aDao;
@Autowired
BDao bDao;
@Test
public void should_create_a_and_corresponding_b(){
//create a
//assert that both a and b are created
}
}
ApplicationConfiguration (специфичная для теста)
@Configuration
@ComponentScan(basePackages = "my.base.package")
class ApplicationConfiguration implements WebMvcConfigurer {
}
Примечание. Мои классы по тестированию интеграции входят в базовый пакет, имеет ли это значение?
Я нашел вариант: поместить конфигурацию теста на отказ во внешний класс и вызывать ее только в моем тесте на ошибку, но он все равно не работает.
На данный момент у меня закончились идеи, поэтому я буду рад вашей помощи!