Prefacio
Cuando estábamos aprendiendo Java, los maestros o los libros generales escribieron que hay ocho tipos básicos de Java. Ellos son: byte, int, corto, largo, flotante, doble, char, booleano. Sin embargo, cuando estaba leyendo la Biblia Java, "pensando en Java" esta mañana, descubrí que el autor le dio un vacío al explicar el tipo de datos. Hay nueve tipos de esto. Leí sobre Baidu y descubrí que algunos libros también escriben nueve tipos básicos de Java.
Hay muchos métodos de tipo vacío en la capa de servicio Java, como Save* y Update*. Estos métodos se actualizan y no tendrán un valor de retorno. La prueba única no puede escribirse en función del valor de retorno del método, por lo que solo pueden usar métodos especiales;
El entorno de este método: Mockito, testng
Métodos probados:
Java
@Override public void updateruleName (Long RuleId, String NewRuleName, Long UCID) {Afirmar.NotNull (ReglyId, "La ID de regla no puede ser nulo"); Afirmar.notnull (newrulename, "El nombre de la regla no puede ser nulo"); Afirmar.notnull (UCID, "El UCID del operador no puede ser nulo"); String CleanNewruleName = StringUtils.trim (newruleName); if (StringUtils.isblank (CleanNewruleName)) {arrojar una nueva ilegalargumentException ("El nombre de la nueva regla no puede estar vacío"); } // Consulta la regla de la regla del objeto de la regla = QueryRulebyId (regido); if (null == regla) {tirar nueva ilegalDataException ("no se encontró regla"); } regla.setRuleId (regido); regla.setRuleName (limpiaNewruleName); regla.setupdateucid (UCID); regla.setUpDateTime (nueva fecha ()); Ruledao.UpdateSelective (regla); }Método de prueba:
Prueba de Java por método de retorno nulo
@Test public void topDateruleName () {long regegroD = 1l; Cadena newrulename = "newruleName"; Largo UCID = 123L; List <Rule> reglas = new ArrayList <Rule> (); Regla regla = nueva regla (); regla.setRuleTatus ((byte) dbValuesetting.rule_status_take_effect); reglas.add (regla); // consulta el mapa del objeto de regla <string, object> params = new HashMap <String, Object> (); params.put ("regido", regido); Mockito.When (Ruledao.Queryrulesbycondition (params)). Luego, Return (reglas); Mockito.doanswer (nueva respuesta <pect> () {public respuesta de objeto (InvocationOnmock Invocation) {// Breakpoint 2: regla regla = (regla) invocation.getArGuments () [0]; afirmación }). When (Ruledao) .UpdatesElective (Mockito.Aly (regla.class)); // punto de interrupción 1: ejecute aquí primero ruleservice.updaterulename (regido, newrulename, ucid); }Como se muestra en los comentarios, si se agregan dos puntos de interrupción, la última línea de llamadas se ejecutará primero durante el proceso de ejecución. Durante la ejecución del punto final 1, se ejecutará el stub de Endpoint 2. En este momento, el parámetro de entrada de ejecución del método se puede obtener en el punto de interrupción 2, y el parámetro entrante se puede realizar afirman la verificación para lograr el propósito;
La nueva respuesta es una interfaz, que solo tiene un método, que se utiliza para establecer el portal de ejecución proxy para llamadas de método.
Implementación de doanswer java
Respuesta de interfaz pública <T> { /*** @param Invocación La invocación en el simulacro. * * @return El valor que se devolverá * * @throws lanzable el lanzamiento de ser lanzado */ t respuesta (invocationOnmock Invocation) lanza lanzamiento;} Cuando el código se ejecuta a " ruleDao.updateSelective(rule); ", se activará un interceptor 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 una nueva respuesta;
Utilizando dos métodos: interceptar y proxy, se realiza la configuración y la obtención de los parámetros entrantes y salientes del método del objeto simulado. De esta manera, las llamadas de clase de ejecución dentro del método Void se pueden verificar;
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea de ayuda para su estudio o trabajo. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.