python-unittest(7)

來源:互聯網
上載者:User

重組舊的測試代碼,使用情境,之前有一段未使用unittest的測試代碼,通過另一個封裝檔案使其運作起來,日常生活中極少用到。

Retooling old test code to run inside unittest.

Sometimes, we may have developed demo code to exercise our system. We don't have to
rewrite it to run it inside unittest. Instead, it is easy to hook it up to the test framework and run
it with some small changes.

1. Create a file named recipe7.py in which to put our application code that we
will be testing.

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

3. Create a new file named recipe7_legacy.py to contain test code that doesn't use
the unittest module.

4. Create a set of legacy tests that are coded, based on Python's assert function, not
with unittest, along with a runner.

5. Run the legacy tests. What is wrong with this situation? Did all the test methods run?
Have we caught all the bugs?

6. Create a new file called recipe7_pyunit.py.

7. Create a unittest set of tests, wrapping each legacy test method inside unittest's
FunctionTestCase.

8. Run the unittest test. Did all the tests run this time? Which test failed? Where is
the bug?

測試代碼:

Code# !usr/bin/env python 2.7# coding: utf-8# filename: recipe7.pyclass 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 val

Code# !usr/bin/env python 2.7# coding: utf-8# filename: recipe7_legacy.pyfrom recipe7 import *class RomanNumeralTester(object):    def __init__(self):        self.cvt = RomanNumeralConverter()    def simple_test(self):        print "+++ Converting M to 1000"        assert self.cvt.convert_to_decimal("M") == 1000    def combo_test1(self):        print "+++ Converting MMX to 2010"        assert self.cvt.convert_to_decimal("MMXX") == 2010    def combo_test2(self):        print "+++ Converting MMMMDCLXVIII to 4668"        val = self.cvt.convert_to_decimal("MMMMDCLXVII")        self.check(val, 4668)    def other_test(self):        print "+++ Converting MMMM to 4000"        val = self.cvt.convert_to_decimal("MMMM")        self.check(val, 4000)    def check(self, actual, expected):        if (actual != expected):            raise AssertionError("%s doesn't equal %s" % \                    (actual, expected))    def test_the_system(self):        self.simple_test()        self.combo_test1()        self.combo_test2()        self.other_test()if __name__ == "__main__":    tester = RomanNumeralTester()    tester.test_the_system()

 

Code# !usr/bin/env python 2.7# coding: utf-8# filename: recipe7_pyunit.pyfrom recipe7 import *from recipe7_legacy import *import unittestif __name__ == "__main__":    tester = RomanNumeralTester()    suite = unittest.TestSuite()    for test in [tester.simple_test, tester.combo_test1, \                 tester.combo_test2, tester.other_test]:        testcase = unittest.FunctionTestCase(test)        suite.addTest(testcase)    unittest.TextTestRunner(verbosity=2).run(suite)

 

輸出結果:

unittest.case.FunctionTestCase (simple_test) ... +++ Converting M to 1000
ok
unittest.case.FunctionTestCase (combo_test1) ... +++ Converting MMX to 2010
FAIL
unittest.case.FunctionTestCase (combo_test2) ... +++ Converting MMMMDCLXVIII to 4668
FAIL
unittest.case.FunctionTestCase (other_test) ... +++ Converting MMMM to 4000
ok

======================================================================
FAIL: unittest.case.FunctionTestCase (combo_test1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "e:\study\python\4668_Code\Chapter 1\01\recipe7_legacy.py", line 17, in combo_test1
    assert self.cvt.convert_to_decimal("MMXX") == 2010
AssertionError

======================================================================
FAIL: unittest.case.FunctionTestCase (combo_test2)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "e:\study\python\4668_Code\Chapter 1\01\recipe7_legacy.py", line 22, in combo_test2
    self.check(val, 4668)
  File "e:\study\python\4668_Code\Chapter 1\01\recipe7_legacy.py", line 32, in check
    (actual, expected))
AssertionError: 4667 doesn't equal 4668

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=2)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.