Erro no Teste Unitário
12/07/2012 13:38
0
Olá,

Eu tenho a seguinte classe:

class Teste {

String nome
String sobrenome

static constraints = {
nome nullable: true, maxSize: 10
sobrenome nullable: true, maxSize: 10
}
}


E o seu teste unitário:

@TestFor(Teste)
class TesteTests {

void testSomething() {
def Teste testeNovo = new Teste(nome: 'Teste de Nome')
assert !testeNovo.validate()
assert 'maxSize' == testeNovo.errors['nome']
}
}


Estou tentando reproduzir os testes de constraint de forma semelhante ao que é mostrado na documentação oficial.
Mas estou recebendo o seguinte erro:

| Loading Grails 2.0.4
| Configuring classpath.
| Environment set to test.....
| Compiling 1 source files.....
| Compiling 1 source files.
| Running 1 unit test... 1 of 1
| Failure: testSomething(br.com.academicoweb.TesteTests)
| Assertion failed:

assert 'maxSize' == testeNovo.errors['nome']
| | | |
| | | Field error in object 'br.com.academicoweb.Teste' on field 'nome': rejected value [Teste de Nome]; codes [br.com.academicoweb.Teste.nome.maxSize.error.br.com.academicoweb.Teste.nome,br.com.academicoweb.Teste.nome.maxSize.error.nome,br.com.academicoweb.Teste.nome.maxSize.error.java.lang.String,br.com.academicoweb.Teste.nome.maxSize.error,teste.nome.maxSize.error.br.com.academicoweb.Teste.nome,teste.nome.maxSize.error.nome,teste.nome.maxSize.error.java.lang.String,teste.nome.maxSize.error,br.com.academicoweb.Teste.nome.maxSize.exceeded.br.com.academicoweb.Teste.nome,br.com.academicoweb.Teste.nome.maxSize.exceeded.nome,br.com.academicoweb.Teste.nome.maxSize.exceeded.java.lang.String,br.com.academicoweb.Teste.nome.maxSize.exceeded,teste.nome.maxSize.exceeded.br.com.academicoweb.Teste.nome,teste.nome.maxSize.exceeded.nome,teste.nome.maxSize.exceeded.java.lang.String,teste.nome.maxSize.exceeded,maxSize.exceeded.br.com.academicoweb.Teste.nome,maxSize.exceeded.nome,maxSize.exceeded.java.lang.String,maxSize.exceeded]; arguments [nome,class br.com.academicoweb.Teste,Teste de Nome,10]; default message [Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]]
| | org.grails.datastore.mapping.validation.ValidationErrors: 1 errors
| | Field error in object 'br.com.academicoweb.Teste' on field 'nome': rejected value [Teste de Nome]; codes [br.com.academicoweb.Teste.nome.maxSize.error.br.com.academicoweb.Teste.nome,br.com.academicoweb.Teste.nome.maxSize.error.nome,br.com.academicoweb.Teste.nome.maxSize.error.java.lang.String,br.com.academicoweb.Teste.nome.maxSize.error,teste.nome.maxSize.error.br.com.academicoweb.Teste.nome,teste.nome.maxSize.error.nome,teste.nome.maxSize.error.java.lang.String,teste.nome.maxSize.error,br.com.academicoweb.Teste.nome.maxSize.exceeded.br.com.academicoweb.Teste.nome,br.com.academicoweb.Teste.nome.maxSize.exceeded.nome,br.com.academicoweb.Teste.nome.maxSize.exceeded.java.lang.String,br.com.academicoweb.Teste.nome.maxSize.exceeded,teste.nome.maxSize.exceeded.br.com.academicoweb.Teste.nome,teste.nome.maxSize.exceeded.nome,teste.nome.maxSize.exceeded.java.lang.String,teste.nome.maxSize.exceeded,maxSize.exceeded.br.com.academicoweb.Teste.nome,maxSize.exceeded.nome,maxSize.exceeded.java.lang.String,maxSize.exceeded]; arguments [nome,class br.com.academicoweb.Teste,Teste de Nome,10]; default message [Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]]
| br.com.academicoweb.Teste : null
false

at br.com.academicoweb.TesteTests.testSomething(TesteTests.groovy:16)
| Completed 1 unit test, 1 failed in 2013ms
| Tests FAILED - view reports in target\test-reports


Segundo a documentação oficial esse teste deveria passar.
Eu devo estar fazendo algo errado... Alguém pode me dar uma ajuda?
Tags: erro, teste unitário, teste, validação


1
Fala, Raimundo!

Essa linha está assim mesmo?
def Teste testeNovo = new Teste(nome: 'Teste de Nome')  

Parece-me que deveria estar apenas
Teste testeNovo = new Teste(nome: 'Teste de Nome')  


E realmente essa parte tá errada na Documentação :(
O que você deveria fazer mesmo era:
assert testeNovo.errors['nome'].codes.contains('maxSize.exceeded')

ou, se preferir
assert 'maxSize.exceeded' in testeNovo.errors['nome'].codes


0
Ei, não é que esteja errado na documentação.

É que pra poder fazer
assert 'maxSize' == testeNovo.errors['nome']  


Deveria ter, logo após a criação do teu testeNovo isso:
mockForConstraintsTests(Teste, [testeNovo])


0
Olá Yoshi,

O def não influenciou em nada no erro.

Esses dois testes funcionaram:
assert testeNovo.errors['nome'].codes.contains('maxSize.exceeded')

e
assert 'maxSize.exceeded' in testeNovo.errors['nome'].codes

Mas acho que vou usar o segundo. Me parece mais elegante.

Obrigado.
12/07/2012 14:23


0
Olá Yoshi,

É verdade, usando o mockForConstraintsTests(Teste, [testeNovo]) o teste que está na documentação funciona corretamente.

Obrigado.
12/07/2012 14:33



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto