Ich muss mich zunächst entschuldigen, wenn die verwendeten Begriffe nicht korrekt sind. Ich benutze groovy/java nur für Automatisierungsaufgaben (Gradle), und ich habe keine jahrelange Erfahrung in der Bereitstellung von Software für die Produktion.Spock - Rückgabe des festen Wertes funktioniert nicht wie erwartet
Also, die Herausforderung, die ich habe, ist wie folgt: Ich habe eine Spezifikation, die versucht, eine Rückkehr Zeichenfolge zu testen ist wie erwartet (fast identisch mit 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"
}
Allerdings ist der Unterschied, dass meine Methode Constraint ein Hauptziel zurückkehrt und sein dieses Objekt toString(), die ich wirklich Stummel will. Ich dachte, ich würde das oben richtig machen, aber es gibt nicht das Ergebnis, das ich erwarte.
Hier ist meine Helferklasse.
import java.security.cert.X509Certificate
class X509CertificateUtils {
static def prettyPrint(X509Certificate x509Certificate) {
return "Subject: ${x509Certificate.getSubjectDN()}"
}
}
Wenn ich laufen diesen Test ich die folgende Fehlermeldung erhalten:
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'
Jede Hilfe dankbar empfangen werden würde.
Danke dafür. Das hat mein Problem gelöst. Ich bin dieser Lösung ein paar Mal nahe gekommen. Aus Interesse wissen Sie, warum die Verkettung der Methoden nicht funktioniert hat? – Sion
Chaining Stubs gilt als "Code-Geruch", können Sie mehr darüber in dieser verwandten Frage (und erste Antwort) lesen: http://StackOverflow.com/Questions/7926891/Mock-Or-Stub-for-chained-call . Auch ist die aktuelle Implementierung von Stubs in Spock einfach nicht programmiert, Stub-Verkettung zu unterstützen, "a.method() >> b" ist im Grunde ein syntaktischer Zucker, der in etwas wie "Registrieren eines Stubs auf Objekt" eine "für Methode" -Methode übersetzt "zurück" b "'. In Ihrem Fall ruft Spock zuerst 'stubCert.getSubjectDN()' auf, erwartet dann, dass das Ergebnis ein Stub ist und versucht, "toString" für dieses zurückgegebene Objekt zu registrieren. – bezmax
Danke, dass du dir die Zeit genommen hast zu antworten. Sehr geschätzt. – Sion