您的位置:首页 > 编程语言 > Python开发

python-unittest(4)

2012-06-24 18:52 344 查看
根据不同的命令行参数进行不同代码的单元测试。

Running a subset of test case methods
Sometimes it's convenient to run only a subset of test methods in a given test case. This recipe
will show how to run either the whole test case, or pick a subset from the command line.

1. Create a new file named recipe4.py in which to put all the 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. Create several test methods.

5. Write a main runner that either runs the entire test case or accepts a variable
number of test methods.

6. Run the recipe with no extra command-line arguments, and see it run all the tests.
Also run it with a test method name, and see it run only the specified test method.

测试代码:

# !usr/bin/env python 2.7
# coding: utf-8
# filename: recipe4.py

class RomanNumeralConverter(object):
def __init__(self, roman_numeral):
self.roman_numeral = roman_numeral
self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}

def convert_to_decimal(self):
val = 0
for char in self.roman_numeral:
val += self.digit_map[char]
return val

import unittest

class RomanNumeralConverterTest(unittest.TestCase):
def test_parsing_millenia(self):
value = RomanNumeralConverter("M")
self.assertEquals(1000, value.convert_to_decimal())

def test_parsing_century(self):
value = RomanNumeralConverter("C")
self.assertEquals(100, value.convert_to_decimal())

if __name__ == "__main__":
import sys
suite = unittest.TestSuite()
if len(sys.argv) == 1:
suite = unittest.TestLoader().loadTestsFromTestCase(\
RomanNumeralConverterTest)
else:
for test_name in sys.argv[1:]:
suite.addTest(\
RomanNumeralConverterTest(test_name))
unittest.TextTestRunner(verbosity=2).run(suite)


运行测试代码,我们发现根据不同的命令行参数,会进行不同代码的测试。

在命令行中进行调用可分4种情况。

1、输入:python recipe4.py

输出:

test_parsing_century (__main__.RomanNumeralConverterTest) ... ok
test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

2、输入:python recipe4.py test_parsing_century

输出:

test_parsing_century (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

3、输入:python recipe4.py test_parsing_millenia

输出:

test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
4、输入:python recipe4.py test_parsing_millenia test_parsing_century

输出:

test_parsing_millenia (__main__.RomanNumeralConverterTest) ... ok
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok

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

OK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: