在斯波克单元测试模拟的方法不会被调用

问题描述:

我试图实现使用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方法被调用。我不明白可能是什么原因。 LocalDateDaysJoda 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) 

} 

请试试这个:

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

嘲讽需要扩展功能和斯波克将不能够这样做,除非功能开启在Kotlin。

+2

在这个快速的答案来临之前,我想重现这个问题,并指出你的示例代码并不显示如何在测试中调用模拟方法。所以我不得不对此作出假设,这并不好。下次还请描述你如何使用某些东西,而不仅仅是你如何声明它。 '......'在这里不是很有帮助。 – kriegaex

+0

谢谢你的评论我会试着在我的问题中预见它,但是你可能只是问了,而且我会将这部分代码添加到我的问题中。 – GROX13