Ich bin neu in Groovy und Grails. Der Spock-Test für das Domänenobjekt, das getestet werden soll, schlägt fehl, da die leere Zeichenfolge in null konvertiert wird. Hier ist der Code. das Domänenobjekt,Warum werden leere Zeichenfolgen in null konvertiert, die in Grails 2.4.0 an den Konstruktor des Domänenobjekts übergeben werden?
class Todo {
String name
Date createdDate
String priority
String status
static constraints = {
priority blank: true
}
}
Die Spock Spezifikation
@TestFor(Todo)
class TodoSpec extends Specification {
void "test persist"() {
when:
new Todo(name: 't1', createdDate: new Date(), priority: "1", status: 'ok').save()
new Todo(name: 't2', createdDate: new Date(), priority: '', status: 'ok').save()
then:
Todo.list().size() == 2
}
}
Das Ergebnis grails test-app
ist
Todo.list().size() == 2
| | |
| 1 false
[collab.todo.Todo : 1]
at collab.todo.TodoSpec.test persist(TodoSpec.groovy:18)
I die leere Zeichenfolge ''
in der Zeile gefunden new Todo(name: 't2', createdDate: new Date(), priority: '', status: 'ok')
zu null
umgewandelt wird durch Debuggen. Nach Google eine Weile, ich sehe, gibt es ein Feature in Grails Umwandlung der leeren Zeichenfolgen aus dem Web-Formular auf Null zu persistieren, die durch eine Konfiguration grails.databinding.convertEmptyStringsToNull = false
in Config.groovy deaktiviert werden kann. Aber ich denke nicht, dass das bei Spock UT so ist. Ich habe es versucht, aber es funktioniert nicht, wie ich dachte.
Ich habe mich gefragt, warum die leere Zeichenfolge als ein Parameter an den Konstruktor übergeben wird, um Null? Danke im Voraus.
Ja, der Test besteht nach dem Hinzufügen von '@TestMixin (grails.test.mixin.web.ControllerUnitTestMixin)'. – user3737977
das hat gerade ein riesiges problem für mich gelöst, nicht sonderlich beeindruckt von den grils auf dieser seite, so viel config und merkwürdiges default-verhalten auf diesem! trotzdem danke!! – soheildb
@soheildb "so viel config und seltsames Standardverhalten auf diesem" - Wenn Sie Empfehlungen für ein besseres Standardverhalten haben, reichen Sie bitte eine Anfrage unter https://github.com/grails/grails-core/issues ein und wir werden einen Blick darauf werfen . –