Prefácio
Quando estávamos aprendendo Java, professores ou livros em geral escreveram que existem oito tipos básicos de Java. São eles: byte, int, curto, longo, flutuante, duplo, char, booleano. No entanto, quando eu estava lendo a Bíblia Java, "pensando em Java" esta manhã, descobri que o autor colocou o vazio ao explicar o tipo de dados. Existem nove tipos disso. Eu li no Baidu e descobri que alguns livros também escrevem nove tipos básicos de Java.
Existem muitos métodos do tipo vazio na camada de serviço Java, como salvar* e atualizar*. Esses métodos são atualizados 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, para que eles só possam usar métodos especiais;
O ambiente deste método: Mockito, testng
Métodos testados:
Java
@Override public void updateName (Long regra, string newRuleName, long ucid) {assert.notNull (regra, "o ID da regra não pode ser nulo"); Assert.NotNull (newrulename, "o nome da regra não pode ser nulo"); Assert.NotNull (UCID, "O UCID do operador não pode ser nulo"); String cleannewruleName = stringUtils.trim (newRuleName); if (stringutils.isblank (cleannewrulename)) {lança nova ilegalArgumentException ("o novo nome da regra não pode estar vazio"); } // consulta a regra do objeto Regra = QueryRuleById (regra); if (null == regra) {lança nova ilegaldataException ("nenhuma regra encontrada"); } regra.setRuleId (regra); regra.setRuleName (cleannewruleName); regra.setUpDateUCID (UCID); regra.setUpDateTime (new Date ()); governada.UpdateTateSelective (regra); }Método de teste:
Teste o método de retorno de Java por Void
@Test public void testUpDateruleName () {long regulid = 1L; String newRuleName = "newRuleName"; Long ucid = 123L; Lista <ROGS> Regras = new ArrayList <ROGS> (); Regra regra = nova regra (); regra.setRulestatus ((byte) dbValueSetting.rule_status_take_effect); regras.add (regra); // consulta o mapa do objeto de regra <string, object> params = new hashmap <string, object> (); params.put ("regra", regra); Mockito.when (governada.QueryRulesbyCondition (params)). Depois return (regras); Mockito.doanswer (nova resposta <ject> () {public objeto Answer (InvocationOnMock Invocation) {// BreakPoint 2: regra regra = (regra) invocação.getarguments () [0]; assert.assertTrue (regulamento.getRuleName (). Equals ("NewRulleName")); }). // ponto de interrupção 1: execute aqui primeiro regras Service.UpDateruleName (regulamento, newruleName, ucid); }Como mostrado nos comentários, se dois pontos de interrupção forem adicionados, a última linha de chamada será executada primeiro durante o processo de execução. Durante a execução do endpoint 1, o stub do endpoint 2 será executado. No momento, o parâmetro de entrada de execução do método pode ser obtido no ponto de interrupção 2, e o parâmetro recebido pode ser realizado reivindicar a verificação para alcançar o objetivo;
A nova resposta é uma interface, que possui apenas um método, usado para definir o portal de execução de proxy para chamadas de método.
Implementação de Doanswer Java
A resposta da interface pública <T> { /*** @param Invocation the Invocation on the Mock. * * @Return O valor a ser devolvido * * @THOWSOWS SHOTABLE O lançável a ser jogado */ t resposta (InvocationOnmock Invocation) lança arremesso;} Quando o código é executado para " ruleDao.updateSelective(rule); ", um interceptador chamado para o objeto simulado será acionado. No interceptador, um proxy dinâmico será criado. A invocação do proxy dinâmico é o método coberto em nova resposta;
Usando dois métodos: interceptar e proxy, é realizada a configuração e a obtenção dos parâmetros de entrada e saída do método de objeto simulado. Dessa forma, as chamadas da classe de execução dentro do método void podem ser verificadas;
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o seu estudo ou trabalho. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.