Best way to assert unit test cases with many conditions

Ganesh Pal ganesh1pal at gmail.com
Tue Jul 18 12:56:21 EDT 2017


Hi  Dear Python Friends,



 The  unittest’s TestCase
<https://docs.python.org/3/library/unittest.html#unittest.TestCase> class
provides several assert methods to check for and report failures . I need
suggestion what would the best way to assert  test cases  in the below
piece of code.



 (1)  should I add several asserts per test case, or  just warn with the
error and fail at the end .  In the line 33 – 35 / 37-38 ( sorry this is a
dirty pusedo-code)  .



(2)  Is there a way we can warn the test using assert method and not fail?
I was trying to see if I could use  assertWarns but the  help says that
 “The test passes if warning is triggered and fails if it isn’t “.

   I don’t want to fail on warning but just continue which next checks



(3)  All more ways to optimize the sample code.



1 import unittest

  2 import library

  3

  4

  5 class AutoRepairFilesystem(unittest.TestCase):

  6

  7     blocks = {}

  8     report = ""

  9

 10     @classmethod

 11     def setUpClass(self):

 12         """

 13         Set UP

 14         """

 15         logging.info("SETUP.....Started")

 16         try:

 17             self.blocks['test01'] = library.inject_corruption1(file1)

 18             self.blocks['test100'] =
library.inject_corruption100(file100)

 19

 20         except Exception as e:

 21             logging.error("Failure injection failed \n")

 22             raise

 23

 24         if not library.check_Repair():

 25             logging.error("Failed running FSCK Tool ")

 26             assert False, "Pre-test checks in setUpClass failed
skipping test"

 27         logging.info("SETUP.....Done")

 28

 29     def test_corruption1(self):

 30         """Run test no 1 """

 31         # This was the only earlier condition then!

 32
#self.assertTrue(library.log_message_is_reported(self.report,self.blocks['test01']):'''

 33         if not library.log_message_is_reported(self.report,

 34                                                self.blocks['test01']):

 35             print "Warning: Reporting Failed.... \n"

 36

 37         if not library.is_corruption_fixed():

 38             print "Warning: Corruption is not fixed .... \n"

 39

 40         if not library.is_corruption_reparied():

 41             assert False, "Corruption not reported,fixed and auto
repaired.\n"

 42

 43     def test_corruption100(self):

 44         """ Run test no 100 """

 45         if not library.log_message_is_reported(self.report,

 46                                                self.blocks['test100']):

 47             print "Warning: Reporting Failed.... \n"

 48

 49         if not library.is_corruption_fixed():

 50             print "Warning: Corruption is not fixed .... \n"

 51

 52         if not library.is_corruption_reparied():

 53             assert False, "Corruption not reported,fixed and auto
repaired.\n"

 54

 55     @classmethod

 56     def tearDownClass(self):

 57         """ Delete all files """

 58         os.system("rm -rf /tmp/files/")

 59

 60 if __name__ == '__main__':

 61     unittest.main()





I am a Linux user with Python 2.7.



Regards,

Ganesh



More information about the Python-list mailing list