Partage de technologie

Introduction aux spécifications du projet/code et à Apifox

2024-07-12

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

Table des matières

Table des matières

1. Spécifications du projet :

(1) Structure du projet :

(2) Objet de données transmis

2. Spécifications des codes :

(1) Convention de dénomination de la base de données :

(2) Spécifications des annotations :

(3) Spécifications de dénomination :

(4) Spécifications front-end et back-end :

(5) Autres spécifications :

3. Utilisation d'Apifox :

(1) Téléchargement et installation :

(2) Créez un nouveau projet et invitez vos coéquipiers :

(3) Rédaction de spécifications pour les documents d'interface

4. Fonction de débogage (doit connaître le backend)

5. Catégorie d'essai

6. Points à noter :

(Une seule personne ne peut pas dominer le pays !!!)


1. Spécifications du projet :

(1) Structure du projet :

Les plus spécifiques sont :

(1) Couche d'entité : la couche d'entité stocke des entités d'objet spécifiques, correspondant aux objets de la base de données.

(2) Couche DAO : (peut être subdivisée en deux couches (la couche d'interface de dao et la couche d'implémentation de dao)) est la couche qui interagit avec la base de données, impliquant des opérations d'ajout, de suppression, de modification et de requête de base de données.

(3) Couche de service (peut être subdivisée en deux couches (couche d'interface de service et couche de mise en œuvre du service)) : principalement responsable de la conception d'applications logiques des modules métier.

(4) Couche contrôleur : la couche contrôleur est responsable du contrôle des processus spécifiques du module métier. La couche contrôleur est responsable de l'interaction front-end et back-end, en acceptant les demandes frontales, en appelant la couche de service et en recevant les données renvoyées par. la couche de service, et enfin renvoyer des pages et des données spécifiques au client.

(5) Couche util : la couche d'outils place les classes d'outils couramment utilisées. Par exemple, certaines méthodes courantes peuvent être écrites sous forme de fonction util, puis le code global peut être simplifié.

(6) Couche d'exception : vous pouvez écrire une couche d'exception de retour unifiée.

(7) Couche de filtre : couche de filtre, telle que le filtrage uniforme de l'authentification d'identité. Si le filtre ne réussit pas, il ne sera qu'en mode invité.

(2) Objet de données transmis

DTO est la structure de données envoyée par la requête frontale.

VO est la réponse renvoyée par le backend en réponse à la requête envoyée par le frontend.

PO est la correspondance réelle entre l'entité objet et la table objet de la base de données.

BO est l'entité objet dans le processus de traitement métier.

2. Spécifications des codes :

Veuillez le nommer en anglais, pas en pinyin chinois.

Soyez facile à comprendre, pas compliqué.

Utilisez des noms de bosses au lieu de noms ordinaires.

Utilisez des sauts de ligne à intervalles réguliers et n’écrivez pas de longs paragraphes.

Soyez annoté et non individualiste.

Spécification de codage du langage Java - Spécification de codage du langage Java (version chinoise) - Documentation en ligne - Matériel de programmation JAVA Niubi Station (javanb.com)icône-par-défaut.png?t=N7T8http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html#312

N'utilisez pas de mots-clés, de mots réservés, etc. qui ont une signification particulière dans Java lui-même ! ! !

(1) Convention de dénomination de la base de données :

(1) Le nom de la table est unique et plusieurs noms de table ne peuvent pas utiliser le même nom.

(2) Le nom de la table doit être une combinaison de lettres minuscules et de traits de soulignement. Essayez d'éviter d'utiliser des lettres majuscules ou des caractères spéciaux. La signification doit être claire. Utilisez "user_info" comme ceci, ou "tbl_user" ou "tbl_user_info".

(3) Ne pas entrer en conflit avec les mots-clés,Pour désactiver les mots réservés, tels que like, desc, range, match, delay, etc., veuillez vous référer aux mots réservés officiels de MySQL.

(4) Nom du champ de la base de données : il se compose de 26 lettres anglaises (sensibles à la casse) plus le trait de soulignement '_', tel que "user_id", "user_name", "user_password", "user_register_time", "user_login_time".

(5) Spécifications des clés primaires et étrangères :

Le nom de l'index de clé primaire est pk_field name ; le nom d'index unique est uk_field name ; le nom d'index ordinaire est idx_field name.
illustrer: pk_ est la clé primaire ; uk_ est la clé unique ; idx_ est l'abréviation d'index.

Clé primaire : pk_+nom de la table
Par exemple:pk_main
Clé étrangère : fk_+nom de la table esclave+_+nom de la table principale
Par exemple:fk_sub_main

(6) Le type décimal est décimal, et float et double sont interdits.
(7) Trois champs nécessaires pour la table : id, create_time, update_time.

(2) Spécifications des annotations :

(1) Annotation de classe :

Les annotations de classe (Class) sont principalement utilisées pour déclarer à quoi sert la classe, ainsi que certaines informations telles que le créateur, la version de la date de création, le nom du package, etc. :

/**
* @version: V1.0
* @auteur : fendo
* @className : utilisateur
* @packageName : utilisateur
* @description : Il s'agit de la classe d'utilisateurs
* @data: 2024-07-01 12:20
 **/

(2) Annotation de méthode (Constructeur) :

Pour les commentaires sur une seule ligne à l'intérieur de la méthode, commencez une nouvelle ligne au-dessus de l'instruction commentée et utilisez // comment. Utilisez /* */ pour les commentaires multilignes dans les méthodes
Les commentaires doivent être alignés sur le code. Toutes les méthodes abstraites (y compris les méthodes dans les interfaces) doivent être annotées avec Javadoc. En plus des valeurs de retour et des descriptions des exceptions des paramètres, elles doivent également indiquer ce que fait la méthode et quelles fonctions elle implémente.Les annotations de méthode (Constructeur) peuvent également être utilisées pour déclarer des paramètres, des retours et d'autres informations de la classe :

/**
* @auteur : fendo
* @methodsName: addUser
* @description : Ajouter un utilisateur
* @param: xxxx
* @return : chaîne
* @throws:
*/

(3) Commentaires de bloc de code : expliquez le but d'une certaine partie de votre code

/**
* Instancier un utilisateur
* xxxxxxx
 */
Utilisateur utilisateur=nouvel utilisateur();

(4) Commentaires en une seule phrase : commentez votre code individuel

User user=new User(); //Instancier un utilisateur

(3) Spécifications de dénomination :

Nommez-le pour que les autres puissent le comprendre, nommez-le en casse chameau et soyez sensible à la casse.

(1) Le nom de la classe utilise le style UpperCamelCase :
Par exemple : UserController, FileController, BookService
(2) Les noms de méthodes, les noms de paramètres, les variables membres et les variables locales utilisent tous le style lowerCamelCase.
Par exemple : getUserName(), userLogin(), getMessage();
(3) Le nom constant doit être en lettres majuscules et les mots doivent être séparés par des traits de soulignement. Essayez d'exprimer la sémantique de manière complète et claire, et ne pensez pas que le nom est trop long.
Par exemple : MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
(4) Le nom de la classe abstraite commence par Abstract ou Base ; le nom de la classe d'exception se termine par Exception. Le nom de la classe de test commence par le nom de la classe qu'elle doit tester et se termine par Test.
(5) Les noms de packages doivent être uniformément en minuscules et il ne doit y avoir qu'un seul mot anglais avec une sémantique naturelle entre les séparateurs de points.Utiliser les noms de packages de manière uniforme Nombre impair forme
formule, mais si le nom de classe a une signification plurielle, le nom de classe peut utiliser la forme plurielle.
(6) Convention de dénomination des méthodes de couche Service/DAO :
1) La méthode pour obtenir un seul objet est préfixée par get.
2) Les méthodes permettant d'obtenir plusieurs objets sont préfixées par list et se terminent par le pluriel, telles que : listObjects
3) La méthode d'obtention des valeurs statistiques est préfixée par count.
4) La méthode d'insertion est préfixée par save/insert.
5) La méthode de suppression est préfixée par supprimer/supprimer.
6) La méthode modifiée est préfixée par update.
(7) Convention de dénomination du modèle de domaine :
1) Objet de données : xxxDO, xxx est le nom de la table de données.
2) Objet de transfert de données : xxxDTO, xxx est le nom lié au domaine d'activité.
3) Objet d'affichage : xxxVO, xxx est généralement le nom de la page web.
(8) Entre tous les objets de classe d'emballage entiers Comparaison des valeurs , tous utilisent la méthode égale pour comparer.
illustrer: Pour Entier var = ? -128 à 127 L'affectation entre les objets Integer est générée dans IntegerCache.cache et les objets existants seront réutilisés. Les valeurs entières dans cette plage peuvent être directement jugées à l'aide de ==, mais toutes les données en dehors de cette plage seront générées sur le tas.
Utiliser des objets existants est un gros piège. Il est recommandé d'utiliser la méthode égale pour le jugement.
(9) Pour juger de l'équivalence entre les nombres à virgule flottante, les types de données de base ne peuvent pas être comparés à l'aide de ==, et les types de données encapsulés ne peuvent pas être jugés à l'aide d'égaux. La comparaison d'égalité BigDecimal doit utiliser la méthode compareTo() au lieu de la méthode equals()
Exemple positif :
(1) Spécifiez une plage d'erreur si la différence entre deux nombres à virgule flottante se situe dans cette plage, ils sont considérés comme égaux.
flotter un = 1,0F - 0,9F ;
flotter b = 0,9F - 0,8F ;
flotter différence = 1e-6F ;
si ( Mathématiques . abdos ( un - b ) < différence ) {
Système . dehors . imprimer ( "vrai" );
}
(2) Utilisez BigDecimal pour définir la valeur, puis effectuez des opérations sur les nombres à virgule flottante.
BigDecimal a = nouveau GrandDécimal ( "1.0" );
Grand décimal b = nouveau GrandDécimal ( "0.9" );
BigDecimal c = nouveau GrandDécimal ( "0.8" );
Grand décimal x = un . soustraire ( b );
BigDecimal y = b . soustraire ( c );
si ( X . comparer aux ( et ) == 0) {
Système . dehors . imprimer ( "vrai" );
}
type d'identifiantRègles de dénominationexemple
Paquets Le préfixe d'un nom de package unique est toujours composé de lettres ASCII minuscules et est un nom de domaine de premier niveau, généralement com, edu, gov, mil, net, org ou le code anglais à deux caractères qui identifie le pays spécifié par le 1981. Norme ISO 3166. Les parties suivantes du nom du package varient en fonction des conventions de dénomination internes des différentes organisations. De telles conventions de dénomination peuvent utiliser la composition de noms de répertoires spécifiques pour distinguer les départements, les projets, les machines ou les noms de connexion.com.sun.fr
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
Des classes Règles de dénomination : Le nom de la classe est un nom, utilisant une casse mixte, avec la première lettre de chaque mot en majuscule. Essayez de garder les noms de vos classes concis et descriptifs. Utilisez des mots complets, évitez les abréviations (sauf si l'abréviation est plus largement utilisée, comme URL, HTML)classe Raster;
classe ImageSprite;
InterfacesRègles de dénomination : les règles de cas sont similaires aux noms de classeinterface RasterDelegate;
interface Stockage;
Méthodes Le nom de la méthode est un verbe, en casse mixte, avec la première lettre du premier mot en minuscule et la première lettre des mots suivants en majuscule.Dénomination des cas de chameauxcourir();
cours vite();
obtenir l'arrière-plan();
Variables À l'exception des noms de variables, toutes les instances, y compris les classes et les constantes de classe, sont en casse mixte, la première lettre du premier mot étant en minuscule et la première lettre des mots suivants en majuscule. Les noms de variables ne doivent pas commencer par un trait de soulignement ou un signe dollar, bien que cela soit syntaxiquement autorisé.
Les noms de variables doivent être courts et descriptifs. Les noms de variables doivent être choisis pour être faciles à retenir, c'est-à-dire pour indiquer leur objectif.

Liste<User> liste d'utilisateur;

Chaîne userName;

Constantes Les déclarations de constantes de classe et de constantes ANSI doivent être rédigées en lettres majuscules, les mots étant séparés par des traits de soulignement. (Essayez d'éviter les constantes ANSI, qui peuvent facilement provoquer des erreurs)statique final int MIN_WIDTH = 4;
statique final int MAX_WIDTH = 999;
statique final int GET_THE_CPU = 1;

(4) Spécifications front-end et back-end :

(1) Méthode de requête : définition des opérations spécifiques. Les méthodes de requête courantes sont les suivantes :
a) GET : récupère les ressources du serveur. (peut être considéré comme une opération de sélection)
b) POST : créez une nouvelle ressource sur le serveur. (peut être considéré comme une opération d'insertion)
c) PUT : Mettre à jour les ressources sur le serveur. (peut être considéré comme une opération de mise à jour)
d) DELETE : Supprimer les ressources du serveur. (peut être considéré comme une opération de suppression)
(2)Informations de retour demandées :
  • code:Code d'état http
    • S'il existe des erreurs supplémentaires que vous définissez vous-même, vous pouvez également envisager d'utiliser vos propres codes d'erreur.
  • message: Informations de description du texte correspondant
    • Si une erreur se produit, des informations d'erreur spécifiques s'affichent.
    • Sinon, l'opération réussit et le traitement généralement simplifié renvoie OK.
  • data
    • chaîne json correspondant aux données
      • dans le cas dtableau, alors la couche la plus externe correspondante est[]delist
      • dans le cas dobjet, alors la couche la plus externe correspondante est{}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) Code d'état de la réponse

Erreur:

  • 1xx (code d'état informatif): Indique que la demande reçue est en cours de traitement.
  • 2xx (code de statut de réussite) : Indique que la demande a été traitée normalement. 200 signifie que la demande a été renvoyée avec succès.
  • 3xx (code d'état de redirection): Une action de suivi est requise pour compléter cette demande.
  • 4xx (code d'état d'erreur client) : Indique que la requête contient une erreur de syntaxe ou ne peut pas être complétée. 400, 404, 401, 403 sont toutes des erreurs causées par le front-end lors de l'envoi des requêtes. Le front-end doit d'abord vérifier le problème, sinon il peut y avoir une erreur dans l'écriture du back-end.
  • 5xx (code d'état d'erreur du serveur) : Une erreur s'est produite pendant que le serveur traitait la requête. Problèmes de back-end, exceptions peuvent être levées, erreurs de serveur, etc.

Succès 2XX


200 ok (demande réussie)
204 aucun contenu (la requête a abouti, mais aucun résultat n'a été renvoyé)
206 contenu partiel (le client demande une partie de la ressource, le serveur répond avec succès et renvoie une gamme de ressources)


Redirection 3XX


Déplacement 301 de façon permanente (redirection permanente)
302 trouvés (redirection temporaire)
303 voir autre (indique que parce qu'il existe un autre URI pour la ressource correspondant à la requête, GET doit être utilisé
Méthode dirigée pour obtenir la ressource demandée)
304 non modifié (indique que lorsque le client utilise l'accès conditionnel à une ressource, le serveur trouve la ressource, mais les conditions de la requête ne remplissent pas les conditions. Cela n'a rien à voir avec la redirection)
Redirection temporaire 307 (même signification que 302)


Erreur client 4XX


400 mauvaise requête (il y a une erreur de syntaxe dans le message de requête)
401 non autorisé (nécessite une authentification (premier retour) ou échec de l'authentification (deuxième retour))
403 interdit (la requête a été rejetée par le serveur)
404 not found (la ressource demandée est introuvable sur le serveur)


Erreur du serveur 5XX


500 erreur interne du serveur (une erreur s'est produite lorsque le serveur a exécuté la requête)
Service 503 indisponible (le serveur est surchargé ou en panne pour maintenance et ne peut pas gérer la demande)

(5) Autres spécifications :

(1) Lorsqu'une requête HTTP transmet du contenu via le corps, la longueur doit être contrôlée. Une fois la longueur maximale dépassée, une erreur se produira dans l'analyse back-end.
illustrer: La limite par défaut de nginx est de 1 Mo et la limite par défaut de Tomcat est de 2 Mo. Lorsqu'il existe un besoin professionnel de transférer un contenu plus volumineux, vous pouvez augmenter la limite côté serveur.
(2) N'utilisez pas return dans les blocs final
illustrer: Une fois l'instruction return dans le bloc try exécutée avec succès, elle ne revient pas immédiatement, mais continue d'exécuter l'instruction dans le bloc enfin. S'il y a une instruction return ici, elle reviendra directement ici, ignorant impitoyablement le point de retour dans le bloc. essayez de bloquer.
(3) Dans les scénarios commerciaux Après avoir lancé une exception et avoir été attrapé Si vous devez revenir en arrière Assurez-vous d'annuler les transactions manuellement.
(4) Vous pouvez utiliser des journaux pour enregistrer des informations, Utiliser le framework de journalisation (SLF4J, JCL — Jakarta Commons Logging (Journalisation de Jakarta Commons) API entrée.

3. Utilisation d'Apifox :

(1) Téléchargement et installation :

Lien : Cliquez sur le lien pour télécharger directement apifox (téléchargez simplement la dernière version). Apifox - une plateforme de collaboration intégrée pour la documentation, le débogage, la simulation et les tests des API. Il dispose de fonctions telles que la gestion des documents d'interface, le débogage d'interface, les tests simulés et automatisés, et l'efficacité du développement, des tests et du débogage conjoint d'interface est multipliée par 10. Le meilleur outil de gestion de documents d’interface et outil de test d’automatisation d’interface.icône-par-défaut.png?t=N7T8https://apifox.com/

(2) Créez un nouveau projet et invitez vos coéquipiers :

1. Créez votre équipe et créez un nouveau projet :

Invitez vos coéquipiers

2. Créez une nouvelle interface et créez un nouveau modèle de données :

(1) Déterminez quelle est la requête (POST, GET, PUT, DELETE) :

(2) L'environnement de test doit être unifié et les URL dans différents environnements sont différentes :

(3) Les paramètres de la requête sont configurés :

Quels paramètres sont configurés ? Fournissez des exemples de paramètres, des noms chinois et des descriptions de paramètres.

(4) La réponse doit être configurée :

Par exemple, il est nécessaire de spécifier quel type d'informations est renvoyé dans différents états, et il doit y avoir des exemples de réussite et des exemples d'exceptions (pour la commodité du front-end).

  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) Un modèle de données peut être créé :

Vous pouvez créer plusieurs modèles de données, ce qui est très pratique pour renvoyer les champs de réponse et également pratique pour le front-end pour afficher vos champs de données.

(3) Rédaction de spécifications pour les documents d'interface

Les spécifications rédactionnelles et les détails spécifiques d’apifox.

Démarrage rapide Apifox | Documentation d'aide Apifoxicône-par-défaut.png?t=N7T8https://apifox.com/help/

(1) Il devrait y avoir une introduction au début du document d'interface API. Cette section peut inclure les éléments suivants :

  • Le nom et le numéro de version de l'interface API
  • Fonction et objectif de l'interface API
  • Objectifs et principes de conception des interfaces API
  • Portée applicable et limites de l'interface API

Le but de cette partie est de permettre aux lecteurs de comprendre la situation de base et les informations générales de l'interface API.

(2) Liste des interfaces

Ensuite, dans le document d'interface API, nous devons lister toutes les interfaces. Chaque interface doit contenir les informations suivantes :

  • Nom et description de l'interface
  • Méthode de requête (GET, POST, PUT, DELETE, etc.)
  • Chemin de la requête (URL)
  • Paramètres de requête (y compris les paramètres de requête et les paramètres de corps)
  • Exemple de requête (exemple complet pouvant inclure les en-têtes et le corps de la requête)
  • Code d'état de la réponse et description
  • Paramètres de réponse (y compris les paramètres d'en-tête et les paramètres de corps)
  • Exemple de réponse (exemple complet pouvant inclure des en-têtes de réponse et un corps de réponse)

Le but de cette section est de permettre aux lecteurs de comprendre rapidement les informations de base de chaque interface et d'utiliser correctement les interfaces en fonction des exemples contenus dans le document.

(3) Description des paramètres de demande et des paramètres de réponse

Après la liste des interfaces, nous devons détailler les paramètres de requête et les paramètres de réponse pour chaque interface. Cette section doit inclure les informations suivantes :

  • Nom et description du paramètre
  • Types et formats de paramètres
  • Si c'est obligatoire et valeur par défaut
  • Exemple de paramètre

Pour les types et formats de paramètres, vous pouvez utiliser des types et formats de données standard, ou vous pouvez définir vos propres types et formats de données en fonction de circonstances spécifiques. Si les valeurs requises et par défaut doivent être déterminées en fonction de la situation réelle.

(4) Description du code d'erreur

Lors de l'utilisation de l'interface API, une erreur se produit parfois. Dans ce cas, un code d'erreur doit être renvoyé pour expliquer le type et la cause de l'erreur. Par conséquent, dans la documentation de l'interface API, nous devons spécifier tous les codes d'erreur possibles. Cette section doit inclure les informations suivantes :

  • Code d'erreur et description
  • Types d'erreurs et causes
  • Exemple de code d'erreur renvoyé par l'interface

Le but de cette section est que le lecteur comprenne tous les types et causes d'erreurs possibles, et soit capable de gérer correctement les erreurs sur la base des exemples de la documentation.

4. Fonction de débogage (doit connaître le backend)

Apprenez à déboguer en Java en 2 minutes [Java dans IDEA]_Comment déboguer dans des projets Java sans cas - Blog CSDNicône-par-défaut.png?t=N7T8https://blog.csdn.net/qq_43436117/article/details/113859737

5. Catégorie d'essai

(1) Opérations spécifiques :

Définir une classe de test

suggestion:

Nom de la classe de test : Nom de la classe testée Test CalculatorTest
Nom du package : xx.xx.xx.test cn.itcast.test
Définir les méthodes de test : peuvent être exécutées indépendamment

suggestion:

Nom de la méthode : nom de la méthode de test testAdd()
Valeur de retour : vide
Liste des paramètres : paramètres vides
Ajouter @Test à la méthode

Importer l'environnement de dépendance Junit

résultat du jugement :

Rouge : échec
vert : succès
Nous utilisons généralement la méthode statique assertEquals(expected, actual) sous la classe Assert pour gérer nos résultats attendus et nos résultats de sortie.

Assert.assertEquals(3, résultat);

Les deux paramètres sont : valeur attendue valeur du résultat du programme

Pourquoi utiliser Assert.assertEquals (attendu, réel) pour traiter les résultats des tests ?

Parce que nous stipulons que le rouge représente l’échec et le vert représente l’exactitude. Lorsque nous utilisons une méthode de test pour tester la méthode d'addition d'un ordinateur, nous affichons uniquement ce résultat (en supposant qu'aucune exception ne se produise). Si nous saisissons 1 et 3, nous nous attendons à obtenir le résultat 4, mais ce que nous produisons est 2 et ce que nous espérons obtenir est 4. Le résultat obtenu à ce moment ne répond pas à nos attentes, mais le résultat courant est toujours vert (représentant correct), n'est-ce pas correct ? À ce stade, nous pouvons utiliser la méthode assertEquals d'Assert à la fin pour comparer la valeur attendue et la valeur résultante générée par le programme. Si elles sont égales, elle sera verte, et. s'ils ne sont pas égaux, ce sera rouge. Cette fois-ci répond-elle à notre définition du vert et du rouge ?

  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. }

@Avant
Ajoutez @Before avant une méthode de test et elle devient une méthode d'initialisation. Cette méthode sera automatiquement exécutée avant que toutes les méthodes de test ne soient exécutées. Elle est généralement utilisée pour l'application de ressources.

@Après
Ajoutez @After avant une méthode de test et elle devient une méthode de libération de ressources, qui sera automatiquement exécutée une fois toutes les méthodes de test exécutées.

La méthode décorée avec @Before sera exécutée avant l'exécution de la méthode de test.

La méthode décorée avec @After sera exécutée après l'exécution de la méthode de test.

Les méthodes modifiées avec @Before ou @After seront exécutées, que la méthode de test se produise ou non.

(2) Générer automatiquement des plug-ins de classe de test

Plugins recommandés pour générer automatiquement des tests unitaires pour les projets Java - Tencent Cloud Developer Community - Tencent Cloud (tencent.com)icône-par-défaut.png?t=N7T8https://cloud.tencent.com/developer/article/1910893

6. Points à noter :

(1) Lors de la rédaction du document d'interface sur le back-end, il doit être rédigé clairement et clairement afin que votre front-end puisse le comprendre. Il doit être rédigé de manière standardisée. Ne l'écrivez pas pour que vous puissiez le comprendre vous-même. . Le nom réécrit et la réponse de l'interface de valeur par défaut doivent être bien écrits.

(2) En plus de ce qui est enseigné, vous pouvez apprendre d'autres choses par vous-même, telles que l'enregistrement de la vérification par courrier électronique, la connexion par code de vérification, le c3p0, le cryptage MD5, les journaux de journaux, le style des résultats, etc.

(3) L'écriture du code doit également être standardisée et la logique doit être rigoureuse ; les paramètres (cookie, session) où un jugement vide est nécessaire, un jugement vide doit être fait, et là où la sécurité peut être augmentée, vous pouvez en tirer des leçons.

(4) Le front-end et le back-end doivent bien coopérer. Ne laissez pas le back-end faire ce qu'il veut sans dire un mot au front-end. La réponse interactive du front-end et du back-end fait également partie de l'évaluation, représentant une grande partie. L'interface que vous avez écrite ne peut pas être exécutée uniquement via apifox. Y a-t-il des erreurs lorsqu'elles sont présentées sur la page front-end spécifique. ? Y a-t-il des problèmes logiques, etc. Il faudra peut-être en tenir compte.

(Une seule personne ne peut pas dominer le pays !!!)

(5) Lors de l'analyse de la demande, précisez les fonctions et interfaces que vous souhaitez réaliser. Si vous avez exécuté certaines fonctions mais que le front-end ne les a pas exécutées, vous pouvez les pousser si les choses qu'ils ont faites nécessitent votre back-end. interfaces/données, si vous n’avez pas écrit, réfléchissez attentivement et communiquez davantage.

Vous pouvez vous comparer à des projets qui fonctionnent réellement ou à quelque chose de similaire, comme un site Web commercial. Ensuite, vous devez comparer les interfaces back-end de ce site Web, les modules fonctionnels qu'il peut avoir et les détails spécifiques.

(6) Ne cherchez pas aveuglément plus, soyez logique et raisonnable et apprenez à simplifier les parties qui peuvent être simplifiées. Mais le nombre de base d’interfaces et le volume de code doivent également être garantis. (Les interfaces que nous avons initialement écrites étaient en gros plus de 40)