Groovy ve Grails’de yeniyim. Boş bir dize boş değere dönüştürülen nedeniyle sınamak için etki alanı nesnesi için Spock testi başarısız olur. İşte kod. alan nesne grails test-app
sonucu neden boş dizeler, Grails 2.4.0'daki alan nesnesinin yapıcısına geçerek null değerine dönüştürülür?
Todo.list().size() == 2
| | |
| 1 false
[collab.todo.Todo : 1]
at collab.todo.TodoSpec.test persist(TodoSpec.groovy:18)
I
new Todo(name: 't2', createdDate: new Date(), priority: '', status: 'ok')
tarafından
null
dönüştürülür doğrultusunda boş dizge
''
bulunan bir
@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
}
}
class Todo {
String name
Date createdDate
String priority
String status
static constraints = {
priority blank: true
}
}
Spock özellikleri, ayıklama. Bir süre sonra, Grails'de boş dizeleri web formundan null'a dönüştürmek için null olan bir özellik olduğunu görüyorum. Bu, Config.groovy'de grails.databinding.convertEmptyStringsToNull = false
yapılandırmasıyla devre dışı bırakılabilir. Ama bunun Spock UT için geçerli olduğunu sanmıyorum. Denedim ama düşündüğüm gibi çalışmıyor.
Boş dizenin neden kurucuya gönderilen bir parametre olarak null değerine dönüştürüldüğünü merak ediyordum? Şimdiden teşekkürler.
Evet, sınama '@TestMixin (grails.test.mixin.web.ControllerUnitTestMixin) 'ekledikten sonra geçer. – user3737977
Bu sadece benim için çok büyük bir problemi çözdü, bu konuda çok etkilendim, bu kadar çok yapılandırma ve garip varsayılan davranış! neyse teşekkürler! – soheildb
@soheildb "bu konuda çok fazla yapılandırma ve garip varsayılan davranış" - Daha iyi varsayılan davranış için önerileriniz varsa, lütfen https://github.com/grails/grails-core/issues adresinden bir istek gönderin ve biz de bir göz atacağız . –