1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Teste de bean validation Vraptor 4

Estou usando Vraptor 4.

Estou tentando criar um teste que verifique se a validação está ocorrendo.

Para isso, estou utilizando o MockValidator, que segundo a sua descrição no site do vraptor (http://www.vraptor.org/pt/docs/validacao/):

"The MockValidator will execute the validation accumulating possible errors. To retrieve them you can use the method getErrors() as you can see in the example: "

Porém os erros de validação provenientes de bean validation não estão sendo inseridos na lista de erros.

Meu model tá +- assim:

@Entity
public class Post {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @NotEmpty(message = "Você deve preencher algum texto")
  private String texto;
}

O Validator:

public class PostValidator {

    public final Validator validator;

    public PostValidator() {
        this(null);
    }

    @Inject
    public PostValidator(Validator validator) {
        super();
        this.validator = validator;
    }

    public void validate(Post post) {
        validator.validate(post);
    }

    public <T> T onErrorRedirectTo(T controller) {
        return validator.onErrorRedirectTo(controller);
    }

    public List<Message> getErrors() {
        return validator.getErrors();
    }
}

Meu controler +- assim:

@Post("")
@Consumes("application/json")
  public void criar(@Valid Post post) {
    validator.validator.onErrorUse(ValidationException.class).throwValidationExceptions(validator.getErrors());
    postDAO.persist(post);

    result.use(Results.json()).withoutRoot().from(edital).serialize();
}

O teste assim:

@Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        result = new MockSerializationResult();
        MockValidator mockValidator = new MockValidator();
        postValidator = newPostValidator(mockValidator);
        controller = new PostController(postDAO, result, postValidator);
    }

@Test
  public void shouldProduceErrors() throws Exception {
  Post mockPost = mockEditalBuilder.withTitulo(null).build();
  when(postDAO.persist(mockPost)).thenReturn(mockPost);

        try {
            controller.criar(mockPost);
        } catch (ValidationException e) {
            List<Message> errors = e.getErrors();
            Assert.assertEquals(1, errors.size());
        }
    }

a view para o Erro:

public class ValidationException implements View {

    private final Result result;

    public ValidationException() {
        this(null);
    }

    @Inject
    public ValidationException(Result result) {
        super();
        this.result = result;
    }

    public void throwValidationExceptions(List<Message> validationExceptions) {
        result.use(Results.http()).setStatusCode(400);
        result.use(Results.json()).withoutRoot().from(validationExceptions).serialize();
    }

}

Eu estou apenas criando o teste e para isso uso o debugger pra verificar o que tem dentro do result. Mas a mensagem de erro do @NotEmpty não é adicionada na lista de erros. (Se eu adicionar um addIf no método criar do Controller, o erro é adicionado.)

Fora dos testes, o @NotEmpty adiciona um erro na lista de erros do Validator normalmente.

Acho que vale a pena adicionar que não quero validar se os bean validations estão funcionando ou não, ou se o validator faz o quê devia ou não, mas sim se está ocorrendo validação no meu código.

Minha pergunta é: Como faço para que a validação ocorra durante os testes e as mensagens de erro sejam adicionadas na lista de erros do valitador?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags vraptor java testes ou faça a sua própria pergunta.