palabra clave vacía
Esta sección explica cómo declarar y llamar a un método nulo.
El siguiente ejemplo declara un método llamado printGrade y lo llama para imprimir la calificación dada.
Ejemplo
public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5 } public static void printGrade(doble puntuación) { if (puntuación >= 90.0) { System.out.println('A'); else if (puntuación >= 80.0) { System.out.println('B'); else if (puntuación >= 70.0) { System.out.println('C'); } else if (puntuación >= 60.0) { System.out.println('D'); else { System.out.println('F'); }}
Los resultados de compilación y ejecución del ejemplo anterior son los siguientes:
do
El método printGrade aquí es un método de tipo nulo y no devuelve ningún valor.
Una llamada a un método nulo debe ser una declaración. Por lo tanto, se llama como una declaración en la tercera línea del método principal. Como cualquier declaración que termine con punto y coma.
Método único para probar el tipo de vacío
La capa de servicio de Java tendrá muchos métodos de tipo nulo, como guardar* y actualizar*. Estos métodos solo realizan algunas actualizaciones y no tendrán un valor de retorno. La prueba única no se puede escribir en función del valor de retorno del método y sí. Utilice sólo métodos especiales.
Entorno para este método: Mockito, testng
Métodos probados:
El método VOID que desea probar
@Override public void updateRuleName(Long ruleId, String newRuleName, Long ucId) { Assert.notNull(ruleId, "El ID de la regla no puede ser nulo"); notNull( ucId, "El UCID del operador no puede ser nulo"); String cleanNewRuleName = StringUtils.trim(newRuleName); if (StringUtils.isBlank(cleanNewRuleName)) { throw new IllegalArgumentException("El nuevo nombre de la regla no puede estar vacío"); // Objeto de regla de consulta Regla de regla = queryRuleById(ruleId); = regla) { throw new IllegalDataException ("No se encontró la regla"); regla.setRuleId(ruleId); regla.setRuleName(cleanNewRuleName); regla.setUpdateUcid(ucId); regla.setUpdateTime(nueva fecha());
Método de prueba:
prueba del método de retorno nulo
@Test public void testUpdateRuleName() { Long ruleId = 1L; String newRuleName = "newRuleName"; Long ucId = 123L; Lista<Regla> reglas = nueva ArrayList<Regla>(); ((byte) DBValueSetting.RULE_STATUS_TAKE_EFFECT); reglas.add(regla); Objeto de regla de consulta Map<String, Object> params = new HashMap<String, Object>(); params.put("ruleId", ruleId.when(ruleDao.queryRulesByCondition(params)).thenReturn(rules); .doAnswer(new Answer<Object>() { respuesta de objeto público (invocación InvocationOnMock) { // Punto de interrupción 2: Regla regla = (Regla) invocation.getArguments()[0]; Assert.assertTrue(rule.getRuleName().equals("newRuleName")); Mockito.any(Rule.class)); // Punto de interrupción 1: Ejecute aquí primero ruleService.updateRuleName(ruleId, nuevoNombreRegla, ucId);
Como se muestra en los comentarios, si se agregan dos puntos de interrupción, la última línea de llamada se ejecutará primero durante la ejecución del punto final 1, y se ejecutará el código auxiliar del punto final 2. En este momento, se puede obtener en el punto de interrupción 2. Vaya a los parámetros de entrada de ejecución del método y realice la verificación de afirmación en los parámetros de entrada para lograr el propósito;
new Anwer es una interfaz con un solo método, que se utiliza para configurar la entrada de ejecución del proxy para llamadas a métodos.
Implementación de doAnswer
interfaz pública Answer<T> { /** * @param invocación la invocación en el simulacro. * * @return el valor que se devolverá * * @throws Throwable el throwable que se lanzará */ T respuesta (invocación InvocationOnMock) throws; }
Cuando el código se ejecuta en "ruleDao.updateSelective (regla);", se activará el interceptor llamado para el objeto simulado. En el interceptor, se creará un proxy dinámico. La invocación del proxy dinámico es el método cubierto en nuevo. Respuesta;
Utilizando métodos de interceptación y proxy, se realiza la configuración y obtención de los parámetros de entrada y salida del método del objeto simulado. Utilizando este método, se puede verificar la llamada de la clase de ejecución dentro del método VOID.