2017-03-02 3 views
1

Ich versuche, Unit-Test zu implementieren, was mein Test wie folgt aussieht:In Spock Unit-Test verspottet Methode wird aufgerufen, dies ist mit <a href="http://spockframework.org/" rel="nofollow noreferrer">Spock framework</a> nicht werden

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 
     ... 
    } 

Hier Klasse ist, in dem ich versuche, verspottet einzuspritzen Objekt:

@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) 
     ... 
    } 
} 

Während Test läuft statt Aufruf meine Methode echte paymentRepository Methode aufgerufen wird. Ich verstehe nicht, was der Grund sein könnte. LocalDate und Days sind von Joda time und schließlich das ist paymentRepository Klasse:

@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) 

} 

Antwort

2

Bitte versuchen Sie dies:

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

Mocking Funktion erweitern muss und Spock tun können, um so nicht, es sei denn Funktion geöffnet ist in Kotlin.

+2

Bevor diese schnelle Antwort kam, wollte ich das Problem reproduzieren und bemerkte, dass Ihr Beispielcode nicht zeigt, wie die Mock-Methode im Test aufgerufen wird. Also musste ich daran denken, was nicht nett ist. Das nächste Mal beschreibe bitte auch, wie du etwas verwendest, nicht nur wie du es deklarierst. '...' ist hier nicht sehr hilfreich. – kriegaex

+0

Vielen Dank für Ihre Bemerkung. Ich werde versuchen, es in meinen Fragen vorherzusehen, aber Sie hätten nur fragen können und ich hätte diesen Teil des Codes zu meiner Frage hinzugefügt. – GROX13

Verwandte Themen