palavra-chave nula
Esta seção explica como declarar e chamar um método void.
O exemplo a seguir declara um método chamado printGrade e o chama para imprimir a nota fornecida.
Exemplo
classe pública TestVoidMethod { public static void main (String [] args) { printGrade (78,5); senão if (pontuação >= 80,0) { System.out.println('B' }); 70,0) { System.out.println('C' }); senão (pontuação >= 60,0) { System.out.println('D'); }}
Os resultados de compilação e execução do exemplo acima são os seguintes:
C
O método printGrade aqui é um método do tipo void e não retorna um valor.
Uma chamada para um método void deve ser uma instrução. Portanto, é chamado como uma instrução na terceira linha do método principal. Assim como qualquer declaração que termina com ponto e vírgula.
Método único para testar o tipo void
A camada de serviço do Java terá muitos métodos do tipo void, como save* e update*. Esses métodos fazem apenas algumas atualizações e não terão um valor de retorno. O teste único não pode ser escrito com base no valor de retorno do método. use apenas métodos especiais;
Ambiente para este método: Mockito, testng
Métodos testados:
O método VOID que você deseja testar
@Override public void updateRuleName(Long RuleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "O ID da regra não pode ser Nulo"); notNull( ucId, "O UCID do operador não pode ser Nulo"); StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("O nome da nova regra não pode estar vazio"); = regra) { throw new IllegalDataException("A regra não foi encontrada"); regra.setRuleId(ruleId); regra.setRuleName(cleanNewRuleName); regra.setUpdateUcid(ucId);
Método de teste:
teste de método de retorno vazio
@Test public void testUpdateRuleName() { Long RuleId = 1L; String newRuleName = "newRuleName" = 123L List<Rule> regras = new ArrayList<Rule>(); ((byte) DBValueSetting.RULE_STATUS_TAKE_EFFECT); Objeto de regra de consulta Map<String, Object> params = new HashMap<String, Object>(); .doAnswer(new Answer<Object>() { public Object resposta(InvocationOnMock invocation) { // Ponto de interrupção 2: Regra regra = (Regra) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")); Mockito.any(Rule.class)); // Ponto de interrupção 1: Execute aqui primeiro RuleService.updateRuleName(ruleId, novoNomedaRegra, ucId);
Conforme mostrado nos comentários, se dois pontos de interrupção forem adicionados, a última linha de chamada será executada primeiro durante a execução. Durante a execução do ponto de interrupção 1, o stub do ponto de interrupção 2 será executado. . Vá para os parâmetros de entrada de execução do método e execute a verificação de afirmação nos parâmetros de entrada para atingir o objetivo;
new Anwer é uma interface com apenas um método, que é usada para definir a entrada de execução do proxy para chamadas de método.
Implementação do doAnswer
public interface Answer<T> { /** * @param invocation a invocação no mock. }
Quando o código for executado para "ruleDao.updateSelective(rule);", o interceptor chamado para o objeto simulado será acionado. No interceptor, um proxy dinâmico será criado. A invocação do proxy dinâmico é o método abordado no novo. Responder;
Usando métodos de interceptação e proxy, a configuração e obtenção dos parâmetros de entrada e saída do método do objeto simulado são realizadas. Usando este método, a chamada da classe de execução dentro do método VOID pode ser verificada.