Spock

2013-05-02 17 views
26

'da sahte argüman yakalama yapmanın bir yolu var. Etrafa baktım ve boşuna hiçbir şey yapmaya çalıştım. İnterweb'lerdeki örnekler azdır ve IMHO oldukça basittir. taklidinin üzerinde "doNetworkCall" içinSpock

('itocNetworkHandler' aşağıda sahte olduğu) Ben parametreyi uzakta saklamak istiyorum

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 

('o'): My kullanım şeklidir.

Parametreyi kullanmak istediğim nedeni, test ettiğim nesnenin parametrelerimi alması, bir şeyler yapması, yeni bir nesne oluşturması ve bunu bir sahtekarlığa aktarması gerekiyordu. Yaratılan nesnenin varsayıldığı gibi göründüğünden emin olmak istiyorum. İşaretçiler çok beğeni topladılar. aşağıdaki gibi

+0

Neden argümanı saklamak istiyorsunuz? Onunla ne yapacaksın? –

+0

Yukarıda neden ihtiyacım olduğunu açıklığa kavuşturdum. – Mathias

cevap

35

Sen bir tartışmayı yakalayabilir: bahsedilen

// 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 == ... 

, genellikle bu tür argümanı kısıtı (örn ...doNetworkCall({ it == ... })) beklenen rekor hakkını kontrol etme gibi daha basit bir çözüm yoktur.

+0

Teşekkürler, çalışır. "I ==" vb. Istemememe sebebi, çok fazla çek vermek istiyorum ve ne demek istediğimi görürseniz, sonuncusuyla ilgili tüm varsayımların çok daha düzgün olduğunu düşünüyorum. – Mathias

+0

Çekleri bir yardımcı yönteme koyabilir ve bağımsız değişken kısıtlamasından yardımcı yöntemini çağırabilirsiniz. –

+1

Evet, bu bir olasılık. Sanırım sonunda onları seviyorum. Parametre bloğu içinde asserts yapmak için biraz "sinsi" hissediyor, okunabilirlik için onları sonunda seviyorum. Ya da belki de lingo'ya alışmam. – Mathias

İlgili konular