在PyUnit中使用断言

6276阅读 0评论2011-06-15 oychw
分类:Python/Ruby

2011-06-15 磁针石

#
承接软件自动化实施与培训等gtalk ouyangchongwu#gmail.com qq 37391319 博客:testing.blog.chinaunix.net

#版权所有,转载刊登请来函联系

#自动化测试和python群组:

#python qq group: 深圳自动化测试python群:113938272

#武冈深圳qq群:66250781

#参考资料:Packtpub.Python.Testing.Cookbook.May.2011.pdf


    PyUnit创建于1999年,2001年Python 2.1集成了PyUnit,模块名为unittest(
library/unittest.html),它python自动化测试的重要模块。下面演示在unittest中使用断言。

        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())

            def test_parsing_half_century(self):
                value = RomanNumeralConverter("L")
                self.assertEquals(50, value.convert_to_decimal())

            def test_parsing_decade(self):
                value = RomanNumeralConverter("X")
                self.assertEquals(10, value.convert_to_decimal())

            def test_parsing_half_decade(self):
                value = RomanNumeralConverter("V")
                self.assertEquals(5, value.convert_to_decimal())

            def test_parsing_one(self):
                value = RomanNumeralConverter("I")
                self.assertEquals(1, value.convert_to_decimal())

            def test_empty_roman_numeral(self):
                value = RomanNumeralConverter("")
                self.assertTrue(value.convert_to_decimal() == 0)
                self.assertFalse(value.convert_to_decimal() > 0)

            def test_no_roman_numeral(self):
                value = RomanNumeralConverter(None)
                self.assertRaises(TypeError, value.convert_to_decimal)

        if __name__ == "__main__":
            unittest.main()
           
        执行结果:
        ........
        ----------------------------------------------------------------------
        Ran 8 tests in 0.000s

        OK   
   
    相关参考如下:
    assertEquals(first, second[, msg]): Compares first and second expressions; and fails, if they don't have the same value. We can optionally print a special message if there is a failure.
    assertTrue(expression[, msg]): Tests the expression and fails if it is false.We can optionally print a special message if there is a failure.
    assertFalse(expression[, msg]): Tests the expression and fails if it is true.We can optionally print a special message if there is a failure.
    assertRaises(exception, callable, …): Runs the callable, with any arguments, for the callable listed afterwards, and fails if it doesn't raise the exception.
   
    注意要优先使用assertEquals,不得已才使用assertTrue或者assertFalse。因为assertEquals的输出更详细,会输出相应的两个值。使用assertEquals要注意列表等可变对象以及自定义对象等。尽量用assertRaises代替fail,因为代码正确时候,根本不会执行fail语句。fail举例如下:
        import unittest
        class BadTest(unittest.TestCase):
        def test_no_roman_numeral(self):
        value = RomanNumeralConverter(None)
        try:
        value.convert_to_decimal()
        self.fail("Expected a TypeError")
        except TypeError, e:
        pass
       
    另外第3方模块unittest2 ()提供了更多的功能。

上一篇:Python 中使用Pexpect进行命令行自动化测试
下一篇:降火凉茶的方子