2017-03-02 142 views
1

我試圖實現使用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) 

} 

回答

2

請試試這個:

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

嘲諷需要擴展功能和斯波克將不能夠這樣做,除非功能開啓在Kotlin。

+2

在這個快速的答案來臨之前,我想重現這個問題,並指出你的示例代碼並不顯示如何在測試中調用模擬方法。所以我不得不對此作出假設,這並不好。下次還請描述你如何使用某些東西,而不僅僅是你如何聲明它。 '......'在這裏不是很有幫助。 – kriegaex

+0

謝謝你的評論我會試着在我的問題中預見它,但是你可能只是問了,而且我會將這部分代碼添加到我的問題中。 – GROX13