Teste de Mockito, um método nulo gera uma exceção


399

Eu tenho um método com um voidtipo de retorno. Também pode gerar uma série de exceções, então eu gostaria de testar essas exceções sendo lançadas. Todas as tentativas falharam pelo mesmo motivo:

O método quando (T) no tipo Stubber não é aplicável aos argumentos (nulo)

Alguma idéia de como posso obter o método para lançar uma exceção especificada?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Respostas:


706

Os parênteses estão mal colocados. Você deve usar

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

e não

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Isso é explicado na documentação


7
@edwardmlyte Esta inconsistência Mockito é uma das razões pelas quais eu interruptor tem que MoxieMocks
Muel

Os dois elementos @ podem ser usados: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Criar uma exceção não a lança.
JB Nizet

11
@ JB Nizet Concordo totalmente com você, mas, se eu escrever doThrow (new Exception ()) em vez de doThrow (Exception.class), tenho o seguinte erro ao iniciar meu teste; Exceção esperada com.company.project.exception.ElementNotFoundException, mas obteve org.mockito.exceptions.base.MockitoException:
clement

2
Faça outra pergunta, com o código em teste, o código do teste e o rastreamento completo da pilha da exceção.
JB Nizet

6
doThrow (new Exception ()). when (object) .voidMethod (any ());
Soumyajit Swain

14

Se você já se perguntou como fazê-lo usando o novo estilo BDD do Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

E para referência futura, pode ser necessário lançar uma exceção e depois não fazer nada:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

11
Obrigado por postar isso aqui; se o método retornar um valor: dado (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); se o método não retornar nada: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Formulário de explicação javadoc: "A remoção de espaços vazios requer uma abordagem diferente de {@link Mockito # when (Object)} (ou BDDMockito.given) porque o compilador não gosta de métodos vazios entre colchetes ..."
Wolf359
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.