unit-testing - 在 Spock 单元测试中,没有调用模拟方法

标签 unit-testing groovy mocking kotlin spock

我正在尝试使用 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
        ...
    }

这是我试图在其中注入(inject)模拟对象的类:
@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类(class):
@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)

}

最佳答案

请试试这个:

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

Mocking 需要扩展功能,除非在 Kotlin 中打开功能,否则 Spock 将无法这样做。

关于unit-testing - 在 Spock 单元测试中,没有调用模拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42553786/

相关文章:

mocking - Jest 快照失败 : val. getMockName 不是函数

node.js - 在 es6 中用 jest react 单元测试

visual-studio - 在 VS 测试框架和 TestInitialize() 属性中使用构造函数有什么区别?

unit-testing - 如何使用 TDD/BDD 开发输入对象?

java - 使用 groovy 为 java 应用程序编写集成测试有什么好处?

maven - CompilerMojo#execute() 导致链接错误 (java.lang.NoSuchMethodError) 并且可能已过时

java - 使用 ArgumentMatcher 时出现 NullPointerException

java - Spring 的 MockHttpServlet(Request|Response) 替代品?

unit-testing - 在 FakeItEasy 中伪造一个枚举器

groovy - 为 "function_score"运行 groovy 脚本时出现问题?