Python-unittest (6)

Source: Internet
Author: User
Tags roman numeral converter

Define the test suite in the Test Module

Defining Test suites inside the test module.

Each test module can provide one or more methods that define a different test suite. One
Method can exercise all the tests in a given module; another method can define a participant
Subset.

1. Create a new file called recipe6.py in which to put our code for this recipe.

2. Pick a class to test. In this case, we will use our Roman numeral converter.

3. Create a test class using the same name as the class under test with test appended
To the end.

4. Write a series of test methods, including a setup method that creates a new
Instance of the romannumeralconverter for each test method.

5. Create some methods in the recipe's module (but not in the test case) that define
Different Test suites.

6. Create a runner that will iterate over each of these test suites and run them through
Unittest's texttestrunner.

7. Run the combination of Test suites, and see the results.

Test code:

Codeclass RomanNumeralConverter(object):    def __init__(self):        self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}    def convert_to_decimal(self, roman_numeral):        val = 0        for char in roman_numeral:            val += self.digit_map[char]        return valimport unittestclass RomanNumeralConverterTest(unittest.TestCase):    def setUp(self):        self.cvt = RomanNumeralConverter()    def test_parsing_millenia(self):        self.assertEquals(1000, \                          self.cvt.convert_to_decimal("M"))    def test_parsing_century(self):        self.assertEquals(100, \                          self.cvt.convert_to_decimal("C"))    def test_parsing_half_century(self):        self.assertEquals(50, \                          self.cvt.convert_to_decimal("L"))    def test_parsing_decade(self):        self.assertEquals(10, \                          self.cvt.convert_to_decimal("X"))    def test_parsing_half_decade(self):        self.assertEquals(5, self.cvt.convert_to_decimal("V"))    def test_parsing_one(self):        self.assertEquals(1, self.cvt.convert_to_decimal("I"))    def test_empty_roman_numeral(self):        self.assertTrue(self.cvt.convert_to_decimal("") == 0)        self.assertFalse(self.cvt.convert_to_decimal("") > 0)    def test_no_roman_numeral(self):        self.assertRaises(TypeError, \                          self.cvt.convert_to_decimal, None)    def test_combo1(self):        self.assertEquals(4000, \                          self.cvt.convert_to_decimal("MMMM"))    def test_combo2(self):        self.assertEquals(2010, \                          self.cvt.convert_to_decimal("MMX"))    def test_combo3(self):        self.assertEquals(4668, \                self.cvt.convert_to_decimal("MMMMDCLXVIII"))def high_and_low():    suite = unittest.TestSuite()    suite.addTest(\       RomanNumeralConverterTest("test_parsing_millenia"))    suite.addTest(\       RomanNumeralConverterTest("test_parsing_one"))    return suitedef combos():    return unittest.TestSuite(map(RomanNumeralConverterTest,\              ["test_combo1", "test_combo2", "test_combo3"]))def all():    return unittest.TestLoader().loadTestsFromTestCase(\                               RomanNumeralConverterTest)if __name__ == "__main__":    for suite_func in [high_and_low, combos, all]:        print "Running test suite '%s'" % suite_func.func_name        suite = suite_func()        unittest.TextTestRunner(verbosity=2).run(suite)

 

Output result:

Running Test Suite 'high _ and_low'
Test_parsing_millenia (_ main _. romannumeralconvertertest)... OK
Test_parsing_one (_ main _. romannumeralconvertertest)... OK

----------------------------------------------------------------------
Ran 2 tests in 0.000 s

OK
Running Test Suite 'combos'
Test_combo1 (_ main _. romannumeralconvertertest)... OK
Test_combo2 (_ main _. romannumeralconvertertest)... OK
Test_combo3 (_ main _. romannumeralconvertertest)... OK

----------------------------------------------------------------------
Ran 3 tests in 0.000 s

OK
Running Test Suite 'all'
Test_combo1 (_ main _. romannumeralconvertertest)... OK
Test_combo2 (_ main _. romannumeralconvertertest)... OK
Test_combo3 (_ main _. romannumeralconvertertest)... OK
Test_empty_roman_numeral (_ main _. romannumeralconvertertest)... OK
Test_no_roman_numeral (_ main _. romannumeralconvertertest)... OK
Test_parsing_century (_ main _. romannumeralconvertertest)... OK
Test_parsing_decade (_ main _. romannumeralconvertertest)... OK
Test_parsing_half_century (_ main _. romannumeralconvertertest)... OK
Test_parsing_half_decade (_ main _. romannumeralconvertertest)... OK
Test_parsing_millenia (_ main _. romannumeralconvertertest)... OK
Test_parsing_one (_ main _. romannumeralconvertertest)... OK

----------------------------------------------------------------------
Ran 11 tests in 0.001 s

OK

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.