Запуск спецификаций Kotlintest в IntelliJ с SpringAutowireConstructorExtension приводит к общему контексту между спецификациями - PullRequest
0 голосов
/ 02 октября 2019

У меня есть 2 файла спецификаций Kotlintest, в которые вводится бин CrudRepository данных Spring (поддерживаемый H2). Как часть настройки для тестов, они оба вставляют сущность с одинаковым именем. Если я запускаю спецификации по отдельности через IntelliJ, они проходят отлично. Если я бегу mvn verify, они проходят отлично. Если я запускаю жизненный цикл проверки на вкладке maven в IntelliJ, они проходят отлично. Но если я щелкну правой кнопкой мыши по общедоступному пакету и запущу файлы спецификации в той же конфигурации запуска, то второй тест файла спецификаций не пройден, поскольку сохраненный объект уже существует. Я попытался использовать @DirtiesContext, но это не работает (так как я предполагаю, что он подключен к junit, а не kotlintest).

Упрощенный пример:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RestControllerOneTest(
    @Autowired private val myRepository: MyRepository,
    @Autowired private val testRestTemplate: TestRestTemplate
) : WordSpec() {

    override fun beforeSpec(spec: Spec) {
        myRepository.save(MyModel("Name"))
    }

    init {
        "Runnning this" should {
            "pass because it runs first" {
                restTemplate.getForEntity("/mymodel", MyModel::class.java)
            }
        }
    }
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RestControllerTwoTest(
    @Autowired private val myRepository: MyRepository,
    @Autowired private val testRestTemplate: TestRestTemplate
) : WordSpec() {

    override fun beforeSpec(spec: Spec) {
        myRepository.save(MyModel("Name"))
    }

    init {
        "Runnning this" should {
            "pass but doesn't because it runs second" {
                restTemplate.getForEntity("/myothermodel", MyModel::class.java)
            }
        }
    }
}
...