【问题标题】:In Spock unit test mocked method is not being called在 Spock 单元测试中,没有调用模拟方法
【发布时间】:2017-03-02 11:08:34
【问题描述】:

我正在尝试使用Spock framework 实现单元测试,这就是我的测试的样子:

    def setup() {
        scrollableResultsMock = Mock(ScrollableResults)
        paymentRepositoryMock = Mock(PaymentRepository)

        paymentRegistryService = new PaymentRegistryService(paymentRepositoryMock)
    }

    @Unroll
    def 'should correctly process'() {
        given:
        paymentRepositoryMock.findUnconfirmedTransactions(_ as LocalDate, _ as Days) >> scrollableResultsMock
        ...
    }

这是我试图注入模拟对象的类:

@Service
open class PaymentRegistryService
@Autowired
constructor(
        val paymentRepository: PaymentRepository
) {

    @Transactional
    open fun parseRegistryFileStream(input: InputStream): LinkedList<Pair<Long, String>> {
        ...
        val registry = paymentRepository.findUnconfirmedTransactions(start, PERIOD)
        ...
    }
}

在运行测试而不是调用我的方法时,真正的paymentRepository 方法正在被调用。我不明白可能是什么原因。 LocalDateDays 来自 Joda time 最后这是 paymentRepository 类:

@Repository
@Transactional
open class PaymentRepository : AbstractRepository<Payment, Long>(Payment::class.java) {

    fun findUnconfirmedTransactions(start: LocalDate, days: Days): ScrollableResults = criteria().add(
            and(
                    eq("isConfirmed", false),
                    ge("transactionDateTime", start),
                    lt("transactionDateTime", start.plus(days))
            )).setCacheMode(CacheMode.IGNORE).scroll(ScrollMode.FORWARD_ONLY)

}

【问题讨论】:

    标签: unit-testing groovy mocking kotlin spock


    【解决方案1】:

    请试试这个:

    open fun findUnconfirmedTransactions(start: LocalDate, days: Days): ScrollableResults
    

    Mocking 需要扩展函数,Spock 将无法这样做,除非函数在 Kotlin 中打开。

    【讨论】:

    • 在这个快速答案到来之前,我想重现这个问题,并注意到您的示例代码没有显示在测试中如何调用模拟方法。所以我不得不对此做出假设,这并不好。下一次也请描述你如何使用某些东西,而不仅仅是你如何声明它。 ... 在这里不是很有帮助。
    • 感谢您的评论,我会尝试在我的问题中预见到这一点,但您可能会问,我会在我的问题中添加这部分代码。
    • 这也适用于 Spock 1.3 - 为了模拟 Kotlin 函数,它必须是 open
    猜你喜欢
    • 2020-07-22
    • 2014-04-16
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多