2017-10-12 1 views
0

Ceci est une fonction i créé:comment écrire une fonction de test unitaire pour ma fonction?

def hab(h, a, b= None): 
    if b != None: 
     result = ("{} , {} , {}".format(h, b, a)) 
    else: 
     result = ("{} , {}".format(h, a)) 
    return result 

Je suis en train d'écrire un test unitaire pour ma fonction, le test unitaire doit affirmer la justesse de la fonction lorsque deux ou trois paramètres sont fournis.

Ceci est mon cadre:

class hab_Test_Class(unittest.TestCase): 
    def test_pass2(self): 

    def test_pass3(self): 

# i'll use code below to run the unit test 
t = hab_Test_Class() 
suite = unittest.TestLoader().loadTestsFromModule(t) 
unittest.TextTestRunner().run(suite) 

J'ai vraiment peu de sens de ce que les tests unitaires fait, mais pas tout à fait l'obtenir.

+0

Veuillez corriger votre indentation. Suivez ceci: https://stackoverflow.com/help/mcve – arsho

+0

Votre question n'est pas claire. Vous savez que vous devez tester la fonction est correcte avec différents paramètres, alors qu'est-ce qui vous empêche d'écrire des tests où vous l'appelez avec ces paramètres et vérifiez les réponses? –

Répondre

0

Supposons que vous ayez tous vos codes dans main.py

def format_person_info(h, a, b= None): 
    if b != None: 
     a = ("{} , {} , {}".format(h, b, a)) 
    else: 
     a = ("{} , {}".format(h, a)) 
    return a 

Vous pouvez lancer le test de cette méthode comme ci-dessous tests.py:

import main 
import unittest 
class hab_Test_Class(unittest.TestCase): 
    def test_pass2(self): 
     return_value = main.format_person_info("shovon","ar") 
     self.assertIsInstance(return_value, str, "The return type is not string") 
     self.assertEqual(return_value, "shovon , ar", "The return value does not match for 2 parameters") 

    def test_pass3(self): 
     return_value = main.format_person_info("shovon","ar",18) 
     self.assertIsInstance(return_value, str, "The return type is not string") 
     self.assertEqual(return_value, "shovon , 18 , ar", "The return value does not match for 3 parameters") 

# i will use code below to run the unit test 
t = hab_Test_Class() 
suite = unittest.TestLoader().loadTestsFromModule(t) 
unittest.TextTestRunner().run(suite) 

Lorsque vous exécutez les tests, la sortie sera comme ci-dessous :

.. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.016s 

OK 

Maintenant, voyons ce que nous avons fait. Nous avons vérifié que le type de retour est une chaîne comme nous l'avions prévu en utilisant assertIsInstance et nous avons vérifié la sortie pour deux et trois paramètres en utilisant assertEqual. Vous pouvez jouer avec ceci en utilisant un ensemble de tests valides et invalides avec assertEqual. La documentation officielle a une brève description de unittest dans ce document officiel Unit testing framework.

0

En règle générale, vous feriez STH le long des lignes de:

class NameAgeJob_Test_Class(unittest.TestCase): 
    def test_pass_string_input_no_b(self): 
     result = format_person_info('foo', 'bar') 
     self.assertEqual(result, 'foo , bar') 

Il y a beaucoup de documentation and examples là-bas.