devo cominciare scusandomi se i termini che uso non sono corretti. Uso groovy/java solo per le attività di automazione (Gradle) e non ho anni di esperienza nella fornitura di software di qualità produttiva.Spock - valore restituendo fisso non funziona come previsto
Quindi, la mia sfida è la seguente: Ho una specifica che sta provando a testare una stringa di restituzione come previsto (quasi identica a this).
def "pretty print returns correct string"() {
setup:
X509Certificate stubCert = Stub()
stubCert.getSubjectDN().toString() >> "Test"
when:
def output = X509CertificateUtils.prettyPrint(stubCert)
then:
output == "Subject: Test"
}
Tuttavia, la differenza è che il mio metodo restituisce un oggetto vincolo principale, e la sua toString di quell'oggetto() che ho molta voglia di stub. Ho pensato che lo stavo facendo correttamente sopra, ma non dà il risultato che mi aspetto.
Ecco la mia classe di supporto.
import java.security.cert.X509Certificate
class X509CertificateUtils {
static def prettyPrint(X509Certificate x509Certificate) {
return "Subject: ${x509Certificate.getSubjectDN()}"
}
}
Se corro questo test ottengo il seguente errore:
output == "Subject: Test"
| |
| false
| 38 differences (20% similarity)
| Subject: (Mock for)t(ype 'Principal' named 'dummy')
| Subject: (Tes------)t(-----------------------------)
Subject: Mock for type 'Principal' named 'dummy'
Qualsiasi aiuto sarebbe stato ricevuto con gratitudine.
Grazie per questo. Questo ha risolto il mio problema. Mi sono avvicinato a questa soluzione alcune volte. Per curiosità sai perché concatenare i metodi non ha funzionato? – Sion
Gli stub concatenati sono considerati un "odore di codice", puoi leggere ulteriori informazioni in merito a questa domanda correlata (e prima risposta): http://stackoverflow.com/questions/7926891/mock-or-stub-for-chained-call . Inoltre, l'attuale implementazione di Stubs in Spock non è semplicemente programmata per supportare il concatenamento dello stub, 'a.method() >> b' è fondamentalmente uno zucchero sintattico che si traduce in qualcosa come" register a stub on object "a" for method "method "per restituire" b "'. Nel tuo caso, Spock prima chiama 'stubCert.getSubjectDN()', quindi si aspetta che il risultato sia uno Stub e prova a registrare "toString" su questo oggetto restituito. – bezmax
Grazie per aver trovato il tempo di rispondere. Molto apprezzato. – Sion