VRaptor teste de validação Hibernate

Fala pessoal,

Como faço para nos meus testes verificar as minhas regras de validação do Hibernate.

Por exemplo:

Eu tenho uma classe com as seguintes validações:

@Component
@SessionScoped
public class UserWeb {

	private User logged;
	
	@NotNull(message="Usuário precisa ser preenchido.")
	private String userName;
}

Eu possuo uma action de um controller que valida o atributo userName:

@Post("/Administrador")
public void login(final UserWeb user) throws Exception
{
	User loaded = null;
		
	this.validator.validate(user);
		
	this.validator.onErrorUsePageOf(this).show();
		
	userWeb.login(loaded);
			
	result.redirectTo(HomeController.class).show();
}

E no meu teste eu queria validar quando passo branco para o user name.

@Test
public void testLoginInWebPageWithUserBlankUserNameReturnValidation() throws Exception
{
	try{
		//Assert
		LoginController mockLoginController = mock(LoginController.class);
		when(result.redirectTo(LoginController.class)).thenReturn(mockLoginController);
		
		UserWeb userWeb = new UserWeb("", "senha");
		
		LoginController login = new LoginController(result, validator, userWeb, users);
		
		 
		//Act
		
		login.login(userWeb);
	}
	catch(Exception ex)
	{
		ValidationException ve = (ValidationException) ex;
		List<Message> errors = ve.getErrors();
		for(Message error : errors)
		{
			System.out.println(error.getMessage());
		}
		//Assert
		assertTrue(errors.size() > 0);
	}
}

O meu erro não retorna nenhuma mensagem de erro e deveria retornar o erro de validação do Hibernate.
Como eu faço isso?

Obrigado pela ajuda,

Rodrigo Morais

Vc não deveria testar que o Hibernate Validator funciona… afinal, o pessoal que desenvolve o Hibernate Validator já faz isso :wink:

Nem testar que o VRaptor chama as validações qdo vc chama o .validate(), afinal a gente que é do VRaptor já fez isso.

Se vc quer testar que as validações estão corretas, faça isso no teste do modelo (UserWebTest), usando a api do Hibernate validator (do Bean Validations, na verdade) para executar as validações.

Oi Lucas,

Eu não gostaria de testar o Hibernate ou o VRaptor.

No meu caso eu estou criando testes integrados e um dos cenários do teste é passar os atributos da classe em branco estes atributos estão anotados com @NotNull.
Como eu faço para testar se o meu cenário esta retornando erro e as mensagens corretas?

Você acha que eu não deveria testar estes cenários?

E se por acaso amanhã alguém alterasse / removesse a anotação por engano eu não teria um teste para garantir que o meu SUT esta funcionando corretamente.

O Validator não deveria trazer as validações do Hibernate durante os testes?
Como eu faço para ele considerar as validações do Hibernate durante o teste?

Obrigado pela ajuda,

Rodrigo Morais

Por isso que eu falei pra vc testar isso no teste do modelo, e não no teste do controller.

Se você usa o MockValidator ele não vai executar as validações do bean validatons

mas se vc usa esse:

ele vai funcionar.

Lucas,

Perfeito!

Obrigado,

Rodrigo Morais