Котлинтест не выполняет тест при использовании springmockk - PullRequest
4 голосов
/ 24 января 2020

Я пытался написать интеграционный тест для моего kotlin весеннего приложения. Для этого я использую фреймворк kotlintest. Так как мне нужно смоделировать один из компонентов в моем приложении, я также добавил mockk с расширением springmockk. После добавления расширения springmockk тест больше не выполняется.

Я заметил, что это происходит, как только Springmock добавляется в зависимости gradle testImplement, его даже не нужно импортировать в сам код приложения.

buildscript {
    ext.kotlin_version = '1.3.21'
    ext.kotlintestVersion='3.4.2'
    ext.spring_boot_version='2.1.4.RELEASE'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBoot_version")
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
    }
}

...

dependencies {
    ...
    testImplementation("org.springframework.boot:spring-boot-starter-test:$springBoot_version") {
    testImplementation("io.kotlintest:kotlintest-runner-junit5:$kotlintestVersion")
    testImplementation("io.kotlintest:kotlintest-extensions-spring:$kotlintestVersion")
    testImplementation("io.mockk:mockk:1.9.3")
//    testImplementation("com.ninja-squad:springmockk:2.0.0")
}

На github я обнаружил Проблема, к сожалению, уже закрыта без какого-либо надлежащего способа совместного использования этих двух платформ: https://github.com/Ninja-Squad/springmockk/issues/26

Редактировать:

Это пример теста, который работает при использовании mockkito, но не при использовании springmockk.

@ExtendWith(SpringExtension::class)
@SpringBootTest
@AutoConfigureMockMvc
@WithMockUser(authorities = ["ROLE_TESTUSER"])
internal class MockTest : AnnotationSpec() {

    override fun listeners() = listOf(SpringListener)

    @Autowired
    lateinit var mockMvc: MockMvc

    @MockkBean
    lateinit var securityHelper: SecurityHelper

    @Test
    fun integrationTest() {
        whenever(securityHelper.someFunction()).thenReturn("test")
        mockMvc.perform(MockMvcRequestBuilders.get("/some/endpoint")
        ).andExpect(MockMvcResultMatchers.status().isOk)
    }
}

./gradlew test --rerun-tasks вывод:

> Configure project :
Property 'app.env' not found using profile dev: use -Papp.env=dev to define the environment for 'SPRING_PROFILES_ACTIVE'

> Task :compileKotlin

BUILD SUCCESSFUL in 56s
5 actionable tasks: 5 executed
...