Grails / Spock: Comment simuler une méthode unique dans la classe où la méthode est appelée à partir de la classe elle-même?
Compte tenu de la suivante, comment faire pour se moquer de processMessage() à l'aide de Spock, afin que je puisse vérifier que processBulkMessage() appelle processMessage() n fois, où n est le nombre de messages dans un BulkMessage?
class BulkMessage {
List messages
}
class MyService {
def processBulkMessage(BulkMessage msg) {
msg.messages.each {subMsg->
processMessage(subMsg)
}
}
def processMessage(Message message) {
}
}
source d'informationauteur John
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser espions et partielle se moque (nécessite Spock 0,7 ou plus récent).
À mon avis ce n'est pas un bien conçus solution. Les Tests et la conception de marcher main dans la main, je recommande cette parler d'enquêter mieux. Si il y a un besoin de vérifier si d'autres méthode a été appelée sur un objet sous test, il semble qu'il devrait être déplacé à un autre objet avec différentes responsabilités.
Voici comment je ferais. Je sais comment la visibilité des œuvres en groovy, de sorte l'esprit les commentaires.
Il n'utilise pas de Spock construit en se moquant de l'API (pas sûr de savoir comment partiellement maquette d'un objet), mais cela devrait faire l'affaire:
Pour Java Spring gens de tests dans Spock:
constructorArgs est le chemin à parcourir, mais l'utilisation constructeur injection. Espion() ne vous permettra pas de définir autocâblés champs directement.
Spock - stubbing méthode void sur Spy objet