web-dev-qa-db-fra.com

Qu'est-ce qu'un test positif et un test négatif dans les tests unitaires?

Je suis assez nouveau pour TDD. Je vois des documents parler de test positif, de test négatif, de test des limites, etc. Quelqu'un peut-il me dire la différence entre un test positif et un test négatif? Y at-il une référence qui dit sur les différents types de tests? (Je ne cherche pas de livres)

18
VJAI

Test positif - teste le système en fournissant les données valides

Test négatif - teste le système en fournissant les données invalides

Par exemple, une application contient une zone de texte et, conformément aux exigences de l'utilisateur .__, cette zone ne doit accepter que Strings.By ne fournit que String en tant que données d'entrée dans la zone de texte __. signifie qu'il s'agit d'un test positif . Si vous donnez une entrée autre que String, cela signifie qu'il est négatif

Le test négatif améliore la couverture de test de votre application. L'utilisation conjointe des approches de test négatif et positif vous permet de tester vos applications avec toutes les données d'entrée possibles (à la fois valides et invalides) et peut vous aider à rendre votre application plus stable et fiable.

Référez-vous à ce Glossaire pour différents types de tests

23
Rohan Patil

En termes de tests unitaires (sur lesquels TDD met l'accent), le concept peut être décrit simplement comme suit:

  • Un test positif vérifie si une fonction/méthode se comporte comme prévu avec l'entrée attendue.
  • Un test négatif vérifie si une fonction/méthode se comporte comme prévu avec une entrée incorrecte. (vous devriez avoir suffisamment de tests négatifs pour couvrir toutes les définitions possibles de "mauvais", idéalement ") Voir cette question pour plus d'informations.
11
mpontillo

Des tests négatifs vérifient que le système ne fait pas ce qu'il ne devrait pas faire. Exemple: Si seul un responsable peut approuver une demande pour un nouvel ordinateur portable, des tests négatifs montrent qu'un utilisateur "normal" ne peut pas approuver cette demande. 

1
AJM

Test unitaire positif vs négatif

===============================================================
|      Positive Test Case      |      Negative Test Case      |
+==============================+==============================+
| test by valid/expected data  | test by invalid data         |
+------------------------------+------------------------------+
| check if the function does   | check if the function does   |
| that it should do            | not that it should not do    |
+------------------------------+------------------------------+
| examine general behaviors of | examine if the function      |
| the function                 | is fault proof (does not     |
|                              | crush/mis-response in bad    |
|                              | situations)                  |
===============================+===============================

Exemple

Fonction candidate:

public boolean deleteFile(String filePath) {
    // try to delete the file; and
    // return true for success, false for failure
}

Cas de test positif Comme cette fonction attend un chemin de fichier, le cas de test positif comprend tous les chemins de fichier valides possibles:

public void deleteFile_forAbsoluteFilePath_P() {
    String filePath = "D:\\Temp\\file.txt";
    // create file, call deleteFile(), and check if really deleted
}

public void deleteFile_forRelativeFilePath_P() {
    String filePath = "file.txt";
    // create file, call deleteFile(), and check if really deleted
}

public void deleteFile_forNonExistingFilePath_P() {
    String filePath = "wHSyY#zP_04l.txt";
    // call deleteFile(), and check if false is returned
}

public void deleteFile_forSymlinkedFilePath_P() {
    String filePath = "D:\\Temp\\symlink\\dir\\file.txt";
    // create file, create symlink, delete file, and
    // check if really deleted
}

public void deleteFile_forUndeletableFile_P() {
    String filePath = "file.bin";
    // create file, restrict delete permission, call deleteFile(), and
    // check if does not crash and returns false
}

Cas de test négatif Tout élément pouvant être envoyé à la fonction et qui n'est pas valide sera en cas de test négatif:

public void deleteFile_forDirectoryPath_N() {
    String dirPath = "D:\\Temp\\dir";
    // create directory, call deleteFile(), and check if false is returned
}

public void deleteFile_forSymlinkPath_N() {
    String symlink = "D:\\Temp\\symlink";
    // create symlink, call deleteFile(), and check if false is returned
}

public void deleteFile_forNullString_N() {
    String filePath = NULL;
    // call deleteFile(), and check if does not crash and returns false
}

public void deleteFile_forCorruptedFilePath_N() {
    String filePath = "D:\\Tem¡¿ÿ¿";
    // call deleteFile(), and check if does not crash and returns false
}

Au lieu de lancer tous les arguments possibles à la fonction, un test élémentaire négatif ne devrait comporter que/ les conditions exceptionnelles prévues .

0
Minhas Kamal