1
votes

Différence entre l'utilisation du test unitaire et la réalisation de tests normalement en Python3

Quelle est réellement la différence entre l'utilisation de tests unitaires et de tests normaux?

Par tests normaux je veux dire, en utilisant l'instruction if par exemple pour déterminer si le calcul est égal à la réponse souhaitée s'il retourne false, nous pouvons lever AssertionError < / p>


5 commentaires

Qu'entendez-vous par «tests normaux»?


@MrBeanBremen Par exemple, en utilisant l'instruction if pour déterminer si le calcul == la réponse souhaitée s'il retourne false, nous pouvons lever AssertionError


Comment exécutez-vous vos tests avec les assertions? Utilisez-vous pytest ou exécutez-vous vous-même certaines fonctions de test? Ce que vous demandez concerne probablement le cadre de test, pas le type de tests.


@MrBeanBremen Je demande si l'utilisation du module de test unitaire pour les tests est préférable de faire des tests normaux ou non.


Il est préférable d'utiliser un cadre de test pour les tests unitaires car c'est beaucoup plus pratique que de lancer le vôtre. Lequel vous voulez utiliser (unittest, pytest, nez) dépend de vous. Si vous avez l'habitude d'utiliser des assertions standard, il est probablement préférable d'utiliser pytest.


3 Réponses :


0
votes

D'après votre question, vous supposez qu'il existe deux types de tests: les tests unitaires et test normal . En fait, il existe de nombreux types de tests. Le test unitaire en fait partie. Vous pouvez lire ici d'autres types de tests .

Si nous supposons que «test normal» est «test de la boîte noire». C'est un logiciel de test sans code source. Pour les tests unitaires, il existe une autre partie du logiciel qui teste l'intégrité du code source lui-même. Qu'est-ce que cela signifie? Vous avez écrit une fonction qui additionne deux nombres. Pour le test unitaire, vous écrivez une autre fonction pour vérifier si votre première fonction fonctionne.

# Your Function
def my_sum_function(x,y):
    return(x+y)

# Your Unit Test Function
def test_sum():
    assert my_sum_function([1, 2]) == 3, "Should be 6"

Non seulement pour Python mais aussi pour tout le langage de programmation, la logique derrière le test est la même.


1 commentaires

devrait être 6?!?



0
votes

Pour le contrôle de la qualité. Si vous codez une application appelée "app1" avec une fonction f1 et une autre fonction f2 (f2 utilise f1) dans votre propre bibliothèque

Sans test unitaire: Vous pouvez faire un changement dans la fonction f1 le tester, cela fonctionnera en f2 mais vous ne remarquerez pas que dans votre programme "app0" que vous avez écrit il y a 2 semaines cela fera planter votre application car dans votre ancienne application "app0" la fonction f3 et f3 utilise également f1 ....

Avec le test unitaire: Vous pouvez attraper ce type de bogue désagréable car le test de la fonction f3 ne passera plus et votre IDE vous le dira lorsque vous changez la fonction f1 dans "app1"

J'espère que cela a du sens (l'anglais n'est pas ma langue maternelle)


0 commentaires

2
votes

Prenons un simple morceau de code comme exemple:

def square(a):
   return a*a;

Les tests qui visent à trouver des bogues dans cette fonction de manière isolée sont des tests unitaires. Ceci est indépendant de la façon dont vous les implémentez réellement: Si vous écrivez simplement une instruction if comme if (square (3)! = 9) et générez une AssertionError comme vous dites, alors c'est un test unitaire. Si à la place vous implémentez le même test en utilisant unittest en appelant assertEqual , alors c'est aussi un test unitaire.

En d'autres termes, que ce soit ou non vous utilisez un (soi-disant) cadre de test unitaire n'est pas un critère pour savoir si vos tests sont des tests unitaires ou non. En fait, malgré les noms des frameworks ('unittest' en Python, 'JUnit' en Java, ...) ces frameworks peuvent être utilisés pour des tests unitaires ainsi que pour d'autres tests, comme les tests d'intégration. Les noms de ces frameworks sont donc un peu trompeurs.

Voilà pour la question originale sur la différence entre les tests unitaires et les tests normaux. Dans l'un des commentaires, vous indiquez plus clairement que vous voulez réellement savoir ce qui est mieux: utiliser ou ne pas utiliser un framework de test. Et, la réponse est claire: optez pour un framework de test.

Après avoir écrit seulement quelques tests «à la main», c'est-à-dire sans framework de test, vous verrez qu'il y a beaucoup de duplication dans votre code de test: vous comparez les résultats avec if - ce n'est pas tellement différent. Mais ensuite, dans le cas de succès, vous écrivez un message `` réussi '', avec le nom du test, dans le cas d'échec, vous écrivez un message `` échoué '', encore une fois avec le nom du test et dans ce cas également avec des informations supplémentaires sur ce qui était le réel et quel était le résultat attendu. Et - avez-vous pensé au cas où le code sous test se termine avec une exception? Donc, vous devez également l'envelopper avec un bloc try / catch pour vous assurer que les exceptions inattendues conduisent à un résultat `` échoué '', encore une fois avec des informations de diagnostic utiles.

Et ainsi de suite ... Tout cela et plus est pris en charge par les frameworks de test pour vous.


0 commentaires