spring - 使用 Mockk 重载解决歧义的 kotlin 单元测试

标签 spring kotlin unit-testing specifications mockk

我需要获取带有规范的查询结果。为了做到这一点,我使用 JpaSpecificationExecutor 的 List<T> findAll(@Nullable Specification<T> spec)方法。问题是我不能在测试中做同样的事情,因为它有几个具有相同参数的方法。 这是我的方法:

fun getFaqList(category: FaqCategory?, subcategory: FaqCategory?, searchText: String?): List<FaqEntity> {

    val spec = Specification.where(FaqSpecification.categoryEquals(category))
        ?.and(FaqSpecification.subcategoryEquals(subcategory))
        ?.and(
            stringFieldContains("title", searchText)
                ?.or(stringFieldContains("description", searchText))
        )

    return faqRepository.findAll(spec)
}

以及我尝试运行的测试:

@MockK
private lateinit var faqRepository: FaqRepository

@InjectMockKs
private lateinit var faqService: FaqService

companion object {
    val FAQ_CATEGORY_ENTITY = FaqCategoryEntity(
        id = AGRICULTURE
    )

    val FAQ_SUBCATEGORY_ENTITY = FaqCategoryEntity(
        id = AGRICULTURE_GENERAL
    )

    val FAQ_ENTITY = FaqEntity(
        id = FAQ_ID,
        title = "title",
        description = "description",
        category = FAQ_CATEGORY_ENTITY,
        subcategory = FAQ_SUBCATEGORY_ENTITY
    )
}

@Test
fun `getFaqList - should return faq list`() {
    val faqList = listOf(FAQ_ENTITY)

    every { faqRepository.findAll(any()) } returns faqList

    val response = faqService.getFaqList(AGRICULTURE, AGRICULTURE_GENERAL, FAQ_SEARCH_TEXT)

    assertThat(response).isEqualTo(faqList)
}

我收到错误:

Overload resolution ambiguity. All these functions match.
public abstract fun <S : FaqEntity!> findAll(example: Example<TypeVariable(S)!>): 
(Mutable)List<TypeVariable(S)!> defined in kz.btsd.backkotlin.faq.FaqRepository
public abstract fun findAll(pageable: Pageable): Page<FaqEntity!> defined in 
kz.btsd.backkotlin.faq.FaqRepository
public abstract fun findAll(sort: Sort): (Mutable)List<FaqEntity!> defined in 
kz.btsd.backkotlin.faq.FaqRepository
public abstract fun findAll(spec: Specification<FaqEntity!>?): (Mutable)List<FaqEntity!> 
defined in kz.btsd.backkotlin.faq.FaqRepository

我应该在 findAll() 参数中写什么以便 spring 理解:

faqRepository.findAll(any())

最佳答案

问题已解决

every { faqRepository.findAll(any<Specification<FaqEntity>>()) } returns faqList

关于spring - 使用 Mockk 重载解决歧义的 kotlin 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66101460/

相关文章:

java - 在 JUnit 规则运行之前使用 Spring TestExecutionListener 初始化状态

java - 为高性能、安全、可扩展的 Web 应用程序选择正确的框架(前端、后端)

java - Bitronix + Spring + Hibernate + 持久性

javascript - Kotlin 和 Firebase 云函数 update() 方法

spring-boot - 逗号分隔的请求参数不适用于 Kotlin 数据类

java - Spring Rest Controller 测试中的 NullPointer 异常 - Java

c# - 如何使模拟第一次抛出异常并在第二次返回值

spring - 提供列表的@Bean-method 被忽略,如果有一个@Bean-method 证明单个bean

JUnit 测试中的 Kotlin 内联类

ios - OCMock:返回与通过参数获取相同的值