Compartir tecnología

Introducción a las especificaciones del proyecto/código y Apifox.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabla de contenido

Tabla de contenido

1. Especificaciones del proyecto:

(1) Estructura del proyecto:

(2) Objeto de datos transmitidos

2. Especificaciones del código:

(1) Convención de nomenclatura de bases de datos:

(2) Especificaciones de anotación:

(3) Especificaciones de denominación:

(4) Especificaciones de front-end y back-end:

(5) Otras especificaciones:

3. Uso de Apifox:

(1) Descarga e instalación:

(2) Crea un nuevo proyecto e invita a tus compañeros de equipo:

(3) Redacción de especificaciones para documentos de interfaz.

4. Función de depuración (debe conocer el backend)

5. Categoría de prueba

6. Notas:

(¡¡¡Una sola persona no puede dominar el país!!!)


1. Especificaciones del proyecto:

(1) Estructura del proyecto:

Los específicos son:

(1) Capa de entidad: la capa de entidad almacena entidades de objetos específicos, correspondientes a los objetos en la base de datos.

(2) Capa DAO: (se puede subdividir en dos capas (capa de interfaz de dao y capa de implementación de dao)) es la capa que interactúa con la base de datos, lo que implica algunas operaciones de adición, eliminación, modificación y consulta de la base de datos.

(3) Capa de servicio (se puede subdividir en dos capas (capa de interfaz de servicio y capa de implementación de servicio)): principal responsable del diseño de aplicaciones lógicas de los módulos comerciales.

(4) Capa de controlador: la capa de controlador es responsable del control de procesos específicos del módulo de negocios. La capa de controlador es responsable de la interacción de front-end y back-end, acepta solicitudes de front-end, llama a la capa de servicio y recibe datos devueltos por. la capa de servicio y, finalmente, devolver páginas y datos específicos al cliente.

(5) Capa de utilidad: la capa de herramientas coloca clases de herramientas de uso común. Por ejemplo, algunos métodos comunes se pueden escribir como funciones de utilidad y luego se puede simplificar el código general.

(6) Capa de excepción: puede escribir una capa de excepción de retorno unificada.

(7) Capa de filtro: capa de filtro, como filtrar uniformemente la autenticación de identidad. Si el filtro no pasa, solo estará en modo invitado.

(2) Objeto de datos transmitidos

DTO es la estructura de datos enviada por la solicitud de front-end.

VO es la respuesta devuelta por el backend en respuesta a la solicitud enviada por el frontend.

PO es la correspondencia real entre la entidad objeto y la tabla de objetos de la base de datos.

BO es la entidad objeto en el proceso de procesamiento empresarial.

2. Especificaciones del código:

Nómbrelo en inglés, no en pinyin chino.

Sea fácil de entender, no sofisticado.

Utilice nombres de jorobas en lugar de nombres comunes.

Utilice saltos de línea a intervalos y no escriba párrafos largos.

Sea anotado, no individualista.

Especificación de codificación del lenguaje Java - Especificación de codificación del lenguaje Java (versión china) - Documentación en línea - Materiales de programación JAVA Niubi Station (javanb.com)icono-predeterminado.png?t=N7T8http://doc.javanb.com/convenciones-de-codigo-para-el-lenguaje-de-programacion-java-zh/index.html#312

¡No utilice palabras clave, palabras reservadas, etc. que tengan significados especiales en el propio Java! ! !

(1) Convención de nomenclatura de bases de datos:

(1) El nombre de la tabla es único y varios nombres de tablas no pueden usar el mismo nombre.

(2) El nombre de la tabla debe ser una combinación de letras minúsculas y guiones bajos. Intente evitar el uso de letras mayúsculas o caracteres especiales. Utilice "user_info" como este, o "tbl_user" o "tbl_user_info".

(3) No entre en conflicto con las palabras clave,Para deshabilitar palabras reservadas, como me gusta, desc, rango, coincidencia, retrasado, etc., consulte las palabras reservadas oficiales de MySQL.

(4) Nombre del campo de la base de datos: consta de 26 letras en inglés (distingue entre mayúsculas y minúsculas) más el guión bajo '_', como "user_id", "user_name", "user_password", "user_register_time", "user_login_time".

(5) Especificaciones de clave primaria y externa:

El nombre del índice de clave principal es pk_field name; el nombre del índice único es uk_field name; el nombre del índice ordinario es idx_field name.
ilustrar: pk_ es la clave principal; uk_ es la clave única; idx_ es la abreviatura de índice.

Clave principal: pk_+nombre de tabla
Por ejemplo:pk_main
Clave externa: fk_+nombre de la tabla esclava+_+nombre de la tabla principal
Por ejemplo:fk_sub_main

(6) El tipo decimal es decimal y están prohibidos flotante y doble.
(7) Tres campos necesarios para la tabla: id, create_time, update_time.

(2) Especificaciones de anotación:

(1) Anotación de clase:

Las anotaciones de clase (Class) se utilizan principalmente para declarar para qué se utiliza la clase, así como cierta información como el creador, la fecha de creación, la versión, el nombre del paquete, etc.:

/**
* @versión: V1.0
* @autor: fendo
* @className: usuario
* @packageName: usuario
* @description: Esta es la clase de usuario
* @datos: 01-07-2024 12:20
 **/

(2) Anotación del método (Constructor):

Para comentarios de una sola línea dentro del método, comience una nueva línea encima de la declaración comentada y use // comentario. Utilice /* */ para comentarios de varias líneas dentro de métodos
Los comentarios deben estar alineados con el código. Todos los métodos abstractos (incluidos los métodos en las interfaces) deben estar anotados con Javadoc. Además de los valores de retorno y las descripciones de las excepciones de los parámetros, también deben indicar qué hace el método y qué funciones implementa.Las anotaciones de métodos (Constructor) también se pueden utilizar para declarar parámetros, retornos y otra información de la clase:

/**
* @autor: fendo
* @methodsName: agregarUsuario
* @description: Agregar un usuario
* @param: xxx
* @return: Cadena
* @lanza:
*/

(3) Comentarios del bloque de código: explique el propósito de una determinada parte de su código

/**
* Crear una instancia de un usuario
* xxxxxxx
 */
Usuario usuario=nuevo Usuario();

(4) Comentarios de una sola frase: comenta tu código individual

Usuario usuario=nuevo Usuario(); //Crear una instancia de un usuario

(3) Especificaciones de denominación:

Nómbrelo para que otros puedan entenderlo, nómbrelo en mayúsculas y minúsculas y distinga entre mayúsculas y minúsculas.

(1) El nombre de la clase usa el estilo UpperCamelCase:
Por ejemplo: UserController, FileController, BookService
(2) Los nombres de métodos, nombres de parámetros, variables miembro y variables locales usan el estilo lowerCamelCase.
Por ejemplo: getUserName(), userLogin(), getMessage();
(3) Los nombres constantes deben estar en letras mayúsculas y las palabras deben estar separadas por guiones bajos. Intente expresar la semántica de manera completa y clara, y no crea que el nombre sea demasiado largo.
Por ejemplo: MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
(4) El nombre de la clase abstracta comienza con Abstract o Base; el nombre de la clase de excepción termina con Exception. El nombre de la clase de prueba comienza con el nombre de la clase que se va a probar y termina con Test.
(5) Los nombres de los paquetes deben estar uniformemente en minúsculas y solo debe haber una palabra en inglés con semántica natural entre los separadores de puntos.Utilice nombres de paquetes de manera uniforme Número impar forma
fórmula, pero si el nombre de la clase tiene un significado plural, el nombre de la clase puede usar la forma plural.
(6) Convención de nomenclatura del método de capa de servicio/DAO:
1) El método para obtener un solo objeto tiene el prefijo get.
2) Los métodos para obtener múltiples objetos tienen el prefijo lista y terminan en plural, como por ejemplo: listObjects
3) El método para obtener valores estadísticos tiene el prefijo recuento.
4) El método de inserción tiene el prefijo guardar/insertar.
5) El método de eliminación tiene el prefijo eliminar/eliminar.
6) El método modificado tiene el prefijo actualización.
(7) Convención de nomenclatura del modelo de dominio:
1) Objeto de datos: xxxDO, xxx es el nombre de la tabla de datos.
2) Objeto de transferencia de datos: xxxDTO, xxx es el nombre relacionado con el campo comercial.
3) Objeto de visualización: xxxVO, xxx es generalmente el nombre de la página web.
(8) Entre todos los objetos de clase de empaquetado de enteros Comparación de valores , todos usan el método igual para comparar.
ilustrar: Para var entero = ? -128 a 127 La asignación entre objetos Integer se genera en IntegerCache.cache y los objetos existentes se reutilizarán. Los valores enteros en este rango se pueden juzgar directamente usando ==, pero todos los datos fuera de este rango no se generarán en el montón.
Este es un gran problema cuando se utilizan objetos existentes. Se recomienda utilizar el método igual para juzgar.
(9) Para juzgar la equivalencia entre números de punto flotante, los tipos de datos básicos no se pueden comparar usando == y los tipos de datos ajustados no se pueden juzgar usando iguales. La comparación de igualdad BigDecimal debe usar el método compareTo() en lugar del método equals()
Ejemplo positivo:
(1) Especifique un rango de error. Si la diferencia entre dos números de coma flotante está dentro de este rango, se consideran iguales.
flotar a = 1.0F - 0,9 °F ;
flotar b = 0,9 °F - 0,8 °F ;
flotar diferencia = 1.ª edición-6.º aniversario ;
si ( Matemáticas . abdominales ( a - b ) < diferencia ) {
Sistema . afuera . imprimirln ( "verdadero" );
}
(2) Utilice BigDecimal para definir el valor y luego realice operaciones con números de punto flotante.
Decimal grande a = nuevo Gran decimal ( "1.0" );
Decimal grande b = nuevo Gran decimal ( "0.9" );
Decimal grande c = nuevo Gran decimal ( "0.8" );
Gran decimal x = a . sustraer ( b );
BigDecimal y = b . sustraer ( C );
si ( X . comparar con ( y ) == 0) {
Sistema . afuera . imprimirln ( "verdadero" );
}
tipo de identificadorreglas de nomenclaturaejemplo
Paquetes El prefijo de un nombre de paquete único siempre son letras ASCII minúsculas y es un nombre de dominio de nivel superior, generalmente com, edu, gov, mil, net, org o el código de dos caracteres en inglés que identifica el país especificado por la Ley de 1981. Norma ISO 3166. Las partes siguientes del nombre del paquete varían según las convenciones de nomenclatura internas de diferentes organizaciones. Estas convenciones de nomenclatura pueden utilizar la composición de nombres de directorios específicos para distinguir departamentos, proyectos, máquinas o nombres de inicio de sesión.com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.queso
Clases Reglas de nomenclatura: el nombre de la clase es un sustantivo, que utiliza mayúsculas y minúsculas, con la primera letra de cada palabra en mayúscula. Intente que los nombres de sus clases sean concisos y descriptivos. Utilice palabras completas, evite abreviaturas (a menos que la abreviatura se utilice más ampliamente, como URL, HTML)clase Raster;
clase ImageSprite;
InterfacesReglas de nomenclatura: las reglas de casos son similares a los nombres de clasesinterfaz RasterDelegate;
Interfaz de almacenamiento;
Métodos El nombre del método es un verbo, en mayúsculas y minúsculas, con la primera letra de la primera palabra en minúscula y la primera letra de las palabras siguientes en mayúscula.Nomenclatura de casos de camelloscorrer();
corre rapido();
obtenerFondo();
variables A excepción de los nombres de variables, todas las instancias, incluidas las clases y las constantes de clase, están en mayúsculas y minúsculas, con la primera letra de la primera palabra en minúscula y la primera letra de las palabras siguientes en mayúscula. Los nombres de variables no deben comenzar con un guión bajo o un signo de dólar, aunque esto está permitido sintácticamente.
Los nombres de las variables deben ser breves y descriptivos. Los nombres de las variables deben elegirse para que sean fáciles de recordar, es decir, que indiquen su propósito.

Lista<User> Lista de usuarios;

Cadena nombreUsuario;

Constantes Las declaraciones de constantes de clase y constantes ANSI deben estar en letras mayúsculas, con las palabras separadas por guiones bajos. (Trate de evitar las constantes ANSI, que pueden causar errores fácilmente)int final estático MIN_WIDTH = 4;
int final estático MAX_WIDTH = 999;
int final estático OBTENER_LA_CPU = 1;

(4) Especificaciones de front-end y back-end:

(1) Método de solicitud: la definición de operaciones específicas es la siguiente:
a) OBTENER: Obtener recursos del servidor. (puede verse como una operación selecta)
b) POST: Crea un nuevo recurso en el servidor. (puede considerarse como una operación de inserción)
c) PUT: Actualiza los recursos en el servidor. (puede verse como una operación de actualización)
d) ELIMINAR: Elimina recursos del servidor. (puede considerarse como una operación de eliminación)
(2) Información de devolución solicitada:
  • code:código de estado http
    • Si hay errores adicionales que usted mismo define, también puede considerar usar sus propios códigos de error.
  • message: Información de descripción del texto correspondiente
    • Si se produce un error, se muestra información de error específica.
    • De lo contrario, la operación se realiza correctamente y, en general, el procesamiento simplificado devuelve OK.
  • data
    • cadena json correspondiente a los datos
      • En el caso deformación, entonces la capa más externa correspondiente es[]delist
      • En el caso deobjeto, entonces la capa más externa correspondiente es{}dedict
  1. {
  2. "code": 200,
  3. "message": "new user has created",
  4. "data": {
  5. "id": "user-4d51faba-97ff-4adf-b256-40d7c9c68103",
  6. "firstName": "crifan",
  7. "lastName": "Li",
  8. "password": "654321",
  9. "phone": "13511112222",
  10. "createdAt": "2016-10-24T20:39:46",
  11. "updatedAt": "2016-10-24T20:39:46"
  12. ......
  13. }
  14. }

(3) Código de estado de respuesta

Error:

  • 1xx (código de estado informativo): Indica que la solicitud recibida se está procesando.
  • 2xx (código de estado de éxito) : Indica que la solicitud se ha procesado normalmente. 200 significa que la solicitud se devolvió correctamente.
  • 3xx (código de estado de redireccionamiento): Se requieren acciones de seguimiento para completar esta solicitud.
  • 4xx (código de estado de error del cliente) : Indica que la solicitud contiene un error de sintaxis o no se puede completar. 400, 404, 401, 403 son todos errores causados ​​​​por el front-end al enviar solicitudes. El front-end debe verificar el problema primero, o puede haber un error en la escritura del back-end.
  • 5xx (código de estado de error del servidor) : Se produjo un error mientras el servidor procesaba la solicitud. Problemas de backend, se pueden generar excepciones, errores del servidor, etc.

Éxito 2XX


200 ok (solicitud exitosa)
204 sin contenido (la solicitud fue exitosa, pero no se devolvió ningún resultado)
206 contenido parcial (el cliente solicita una parte del recurso, el servidor responde con éxito y devuelve una variedad de recursos)


redirección 3XX


Movimiento 301 permanentemente (redireccionamiento permanente)
302 encontrado (redireccionamiento temporal)
303 ver otro (indica que debido a que hay otro URI para el recurso correspondiente a la solicitud, se debe usar GET
Método dirigido a obtener el recurso solicitado)
304 no modificado (indica que cuando el cliente usa acceso condicional a un recurso, el servidor encuentra el recurso, pero las condiciones de la solicitud no cumplen con las condiciones. No tiene nada que ver con la redirección)
Redirección temporal 307 (mismo significado que 302)


error de cliente 4XX


400 solicitud incorrecta (hay un error de sintaxis en el mensaje de solicitud)
401 no autorizado (requiere autenticación (primera devolución) o autenticación fallida (segunda devolución))
403 prohibido (la solicitud fue rechazada por el servidor)
404 no encontrado (el recurso solicitado no se puede encontrar en el servidor)


error del servidor 5XX


Error interno del servidor 500 (se produjo un error cuando el servidor ejecutó la solicitud)
Servicio 503 no disponible (el servidor está sobrecargado o inactivo por mantenimiento y no puede manejar la solicitud)

(5) Otras especificaciones:

(1) Cuando una solicitud HTTP transmite contenido a través del cuerpo, se debe controlar la longitud. Después de exceder la longitud máxima, se producirá un error en el análisis de fondo.
ilustrar: El límite predeterminado de nginx es 1 MB y el límite predeterminado de tomcat es 2 MB. Cuando existe una necesidad comercial de transferir contenido más grande, puede aumentar el límite del lado del servidor.
(2) No uses return en bloques finalmente
ilustrar: Después de que la declaración de retorno en el bloque try se ejecuta con éxito, no regresa inmediatamente, pero continúa ejecutando la declaración en el bloque finalmente. Si hay una declaración de retorno aquí, regresará directamente aquí, descartando sin piedad el punto de retorno en el. prueba bloquear.
(3) En escenarios empresariales Después de lanzar una excepción y ser atrapado Si necesitas retroceder Asegúrese de revertir las transacciones manualmente.
(4) Puede utilizar registros para registrar información, Utilice el marco de registro (SLF4J) JCL—Registro de Yakarta Commons) API en .

3. Uso de Apifox:

(1) Descarga e instalación:

Enlace: haga clic en el enlace para descargar apifox directamente (simplemente descargue la última versión). Apifox: una plataforma de colaboración integrada para documentación, depuración, simulación y pruebas de API. Tiene funciones como gestión de documentos de interfaz, depuración de interfaz, pruebas simuladas y automatizadas, y la eficiencia del desarrollo, las pruebas y la depuración conjunta de la interfaz aumenta 10 veces. La mejor herramienta de gestión de documentos de interfaz y herramienta de prueba de automatización de interfaz.icono-predeterminado.png?t=N7T8https://apifox.com/

(2) Crea un nuevo proyecto e invita a tus compañeros de equipo:

1. Crea tu equipo y crea un nuevo proyecto:

Invita a tus compañeros de equipo

2. Cree una nueva interfaz y un nuevo modelo de datos:

(1) Determine cuál es la solicitud (POST, GET, PUT, DELETE):

(2) El entorno de prueba debe estar unificado y las URL en diferentes entornos son diferentes:

(3) Los parámetros de solicitud están configurados:

¿Qué parámetros están configurados? Proporcione ejemplos de parámetros, nombres chinos y descripciones de parámetros.

(4) La respuesta debe configurarse:

Por ejemplo, es necesario especificar qué tipo de información se devuelve en diferentes estados, y debe haber ejemplos de éxito y ejemplos de excepción (para conveniencia de la interfaz).

  1. {
  2. "code": 200,
  3. "message": "登入成功",
  4. "data": {
  5. "user_id": 27,
  6. "user_name": "孟霞",
  7. "user_password": "123456",
  8. "user_age": "15",
  9. "user_photo": "http://dummyimage.com/400x400",
  10. "user_last_time": "1996-12-11 09:03:49",
  11. "user_indentity": "messager",
  12. "user_birthday": "2024-02-23"
  13. }
  14. }

(5) Se puede crear un modelo de datos:

Puede crear varios modelos de datos, lo cual es muy conveniente para devolver campos de respuesta y también conveniente para que el front-end vea sus campos de datos.

(3) Redacción de especificaciones para documentos de interfaz.

Las especificaciones de escritura y detalles específicos de apifox.

Inicio rápido de Apifox | Documentación de ayuda de Apifoxicono-predeterminado.png?t=N7T8https://apifox.com/ayuda/

(1) Debe haber una introducción al comienzo del documento de la interfaz API. Esta sección puede incluir lo siguiente:

  • El nombre y número de versión de la interfaz API.
  • Función y propósito de la interfaz API
  • Propósitos y principios de diseño de las interfaces API.
  • Alcance aplicable y limitaciones de la interfaz API

El propósito de esta parte es permitir que los lectores comprendan la situación básica y la información general de la interfaz API.

(2) Lista de interfaces

A continuación, en el documento de la interfaz API, debemos enumerar todas las interfaces. Cada interfaz debe contener la siguiente información:

  • Nombre y descripción de la interfaz
  • Método de solicitud (OBTENER, PUBLICAR, PUT, ELIMINAR, etc.)
  • Ruta de solicitud (URL)
  • Parámetros de solicitud (incluidos los parámetros de consulta y los parámetros del cuerpo)
  • Ejemplo de solicitud (ejemplo completo que puede incluir encabezados y cuerpo de solicitud)
  • Código de estado de respuesta y descripción
  • Parámetros de respuesta (incluidos los parámetros de encabezado y los parámetros de cuerpo)
  • Ejemplo de respuesta (ejemplo completo que puede incluir encabezados y cuerpo de respuesta)

El propósito de esta sección es permitir a los lectores comprender rápidamente la información básica de cada interfaz y utilizar las interfaces correctamente según los ejemplos del documento.

(3) Descripción de los parámetros de solicitud y parámetros de respuesta

Después de la lista de interfaces, debemos detallar los parámetros de solicitud y los parámetros de respuesta para cada interfaz. Esta sección debe incluir la siguiente información:

  • Nombre y descripción del parámetro
  • Tipos y formatos de parámetros
  • ¿Es obligatorio y tiene un valor predeterminado?
  • Ejemplo de parámetro

Para los tipos y formatos de parámetros, puede utilizar tipos y formatos de datos estándar, o puede definir sus propios tipos y formatos de datos según circunstancias específicas. Si es necesario determinar los valores requeridos y predeterminados en función de la situación real.

(4) Descripción del código de error

Cuando se utiliza la interfaz API, a veces se produce un error. En este caso, es necesario devolver un código de error para explicar el tipo y la causa del error. Por lo tanto, en la documentación de la interfaz API, debemos especificar todos los códigos de error posibles. Esta sección debe incluir la siguiente información:

  • Código de error y descripción
  • Tipos de errores y causas
  • Ejemplo de código de error devuelto por la interfaz

El propósito de esta sección es que el lector comprenda todos los posibles tipos de errores y causas, y que pueda manejar los errores correctamente basándose en los ejemplos de la documentación.

4. Función de depuración (debe conocer el backend)

Enseñarle cómo depurar en Java en 2 minutos [Java en IDEA]_Cómo depurar en proyectos java sin casos - blog de CSDNicono-predeterminado.png?t=N7T8https://blog.csdn.net/qq_43436117/article/details/113859737

5. Categoría de prueba

(1) Operaciones específicas:

Definir una clase de prueba

sugerencia:

Nombre de la clase de prueba: Nombre de la clase probada Prueba CalculadoraPrueba
Nombre del paquete: xx.xx.xx.test cn.itcast.test
Definir métodos de prueba: se puede ejecutar de forma independiente

sugerencia:

Nombre del método: nombre del método de prueba testAdd()
Valor de retorno: nulo
Lista de parámetros: parámetros vacíos
Agregue @Test al método

Importar entorno de dependencia Junit

resultado del juicio:

Rojo: fallido
verde: éxito
Generalmente usamos el método estático afirmarEquals (esperado, real) en la clase Assert para manejar nuestros resultados esperados y generar resultados.

Afirmar.assertEquals(3, resultado);

Los dos parámetros son: valor esperado valor del resultado del programa

¿Por qué utilizar Assert.assertEquals (esperado, real) para procesar los resultados de las pruebas?

Porque estipulamos que el rojo representa el fracaso y el verde la corrección. Cuando usamos un método de prueba para probar el método de suma de una computadora, solo generamos este resultado (suponiendo que no ocurra ninguna excepción). Si ingresamos 1 y 3, esperamos obtener el resultado 4, pero lo que obtenemos es 2 y lo que esperamos obtener es 4. El resultado obtenido en este momento no cumple con nuestras expectativas, pero el resultado en ejecución aún está en verde. (que representa correcto), ¿no es correcto? En este momento, podemos usar el método afirmarEquals de Assert al final para comparar el valor esperado y el valor resultante generado por el programa. Si son iguales, será verde. si no son iguales, será rojo. ¿Cumple esta vez nuestra definición de verde y rojo?

  1. package cn.itcast.test;
  2. import cn.itcast.junit.Calculator;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. public class CalculatorTest {
  6. /**
  7. * 测试add方法
  8. */
  9. @Test
  10. public void testAdd(){
  11. Calculator c = new Calculator();
  12. int a = 1, b = 2;
  13. int result = c.add(1, 2);
  14. Assert.assertEquals(3, result);
  15. }
  16. /**
  17. * 测试sub方法
  18. */
  19. @Test
  20. public void testSub(){
  21. Calculator c = new Calculator();
  22. int a = 1, b = 2;
  23. int result = c.sub(1, 2);
  24. Assert.assertEquals(-1, 2);
  25. }
  26. }

@Antes
Agregue @Before antes de un método de prueba y se convertirá en un método de inicialización. Este método se ejecutará automáticamente antes de que se ejecuten todos los métodos de prueba. Generalmente se usa para la aplicación de recursos.

@Después
Agregue @After antes de un método de prueba y se convertirá en un método de liberación de recursos, que se ejecutará automáticamente después de que se ejecuten todos los métodos de prueba.

El método decorado con @Before se ejecutará antes de que se ejecute el método de prueba.

El método decorado con @After se ejecutará después de que se ejecute el método de prueba.

Los métodos modificados con @Before o @After se ejecutarán independientemente de si ocurre el método de prueba.

(2) Generar automáticamente complementos de clase de prueba

Complementos recomendados para generar automáticamente pruebas unitarias para proyectos Java - Tencent Cloud Developer Community - Tencent Cloud (tencent.com)icono-predeterminado.png?t=N7T8https://cloud.tencent.com/developer/article/1910893

6. Notas:

(1) Al escribir el documento de la interfaz en la parte posterior, debe escribirse de manera clara y clara para que su interfaz pueda entenderlo. Debe estar escrito de manera estandarizada, no para que usted mismo pueda entenderlo. El nombre reescrito y la respuesta de la interfaz del valor predeterminado deben estar bien escritos.

(2) Además de lo que se enseña, puede aprender algunas otras cosas usted mismo, como el registro de verificación por correo electrónico, el inicio de sesión con código de verificación, c3p0, cifrado MD5, registros de registro, estilo de resultado, etc.

(3) La escritura del código también debe estar estandarizada y la lógica debe ser rigurosa (cookie, sesión); donde se necesita un juicio vacío, se debe hacer un juicio vacío y donde se puede aumentar la seguridad, se puede aprender de ello;

(4) El front-end y el back-end deben cooperar bien. No permita que el back-end simplemente haga lo suyo sin decirle una palabra al front-end. La respuesta interactiva del front-end y back-end también es parte de la evaluación, lo que representa una gran parte de la interfaz que escribió no solo se puede ejecutar a través de apifox. ¿Hay algún error cuando se presenta en la página de front-end específica? ¿Hay algún problema lógico, etc. que podría ser necesario considerar?

(¡¡¡Una sola persona no puede dominar el país!!!)

(5) Durante el análisis de la demanda, estipule las funciones e interfaces que desea realizar. Si ha realizado algunas funciones pero el front-end no las ha realizado, puede impulsarlas si las cosas que han hecho requieren su back-end. interfaces/datos, si no escribiste, reflexiona cuidadosamente y comunícate más.

Puede comparar proyectos que realmente funcionan o algo similar, como un sitio web de compras. Luego, debe comparar con Taobao las interfaces de back-end que puede tener este sitio web, los módulos funcionales que puede tener y los detalles específicos.

(6) No busque más ciegamente, sea lógico y razonable y aprenda a simplificar las partes que se pueden simplificar. Pero también se debe garantizar el número básico de interfaces y el volumen de código. (Las interfaces que escribimos originalmente eran básicamente más de 40)