Vraag Is er een manier om nock-argumentvastlegging in Spock te doen?


Ik heb rondgekeken en verschillende dingen geprobeerd zonder resultaat. De voorbeelden die er op de interwebs zijn weinig, en IMHO vrij eenvoudig. Mijn gebruik case:

(de 'itocNetworkHandler' hieronder is de mock)

when: "we're doing stuff"
    StandardResponse response = cms.doCardStuff("123", "111", order)
....
then: "we get proper calls and response object"
    1 * cms.itocNetworkHandler.doNetworkCall(
            { it instanceof ReplacementRequestRecord
            }, StandardResponseRecord.class) >> record

Ik wil de parameter ('it') opslaan in de "doNetworkCall" op de mock.

De reden dat ik de parameter wil, is omdat het object dat ik aan het testen is mijn parameters moet aannemen, dingen moet doen, een nieuw object moet maken en dat aan mijn mock moet doorgeven. Ik wil ervoor zorgen dat het gemaakte object eruitziet zoals het hoort.

Wijzen worden zeer op prijs gesteld.


29
2018-05-02 05:54


oorsprong


antwoorden:


U kunt een argument als volgt vastleggen:

// must be declared before when-block (or inside Specification.interaction {})
def captured

when:
...

then:
1 * mock.doNetworkCall(...) >> { record, recordClass -> 
    // save the argument
    captured = record
    ...
}
// use the saved argument
captured == ...

Dat gezegd hebbende, is er vaak een eenvoudiger oplossing, zoals het controleren van de verwachte record in de argumentbeperking (bijv. ...doNetworkCall( { it == ... } )).


40
2018-05-02 07:29