2017-03-02 2 views
1

Je suis en train de mettre en œuvre des tests unitaires à l'aide Spock framework c'est ce que mon test ressemble à:En test unitaire Spock méthode moquée n'est pas appelé

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

Voici la classe dans laquelle je suis en train d'injecter raillé objet:

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

Tout test en cours au lieu d'appeler ma méthode vraie méthode paymentRepository est appelée. Je ne comprends pas ce qui pourrait être la raison. LocalDate et Days sont de Joda time et enfin c'est paymentRepository classe:

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

} 

Répondre

2

S'il vous plaît essayez ceci:

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

Mocking a besoin d'étendre la fonction et Spock ne sera pas en mesure de le faire à moins que la fonction est ouverte à Kotlin.

+2

Avant cette réponse rapide, je voulais reproduire le problème et noté que votre code d'exemple ne montre pas comment la méthode fictive est appelée dans le test. J'ai donc dû faire des hypothèses, ce qui n'est pas bien. La prochaine fois s'il vous plaît également décrire comment vous utilisez quelque chose, pas seulement comment vous le déclarez. '...' n'est pas très utile ici. – kriegaex

+0

Merci pour votre remarque Je vais essayer de le prévoir dans mes questions mais vous auriez pu le demander et j'aurais ajouté cette partie du code à ma question. – GROX13