zoukankan      html  css  js  c++  java
  • Django单元测试简单示例

    对一个功能的验证往往是需要很多多测试用例,可以把测试用例集合在一起执行,这就产生了测试套件TestSuite 的概念,它是用来组装单个测试用例,规定用例的执行的顺序,而且TestSuite也可以嵌套TestSuite。

    可以通过addTest() 加载TestCase 到TestSuite 中,再返回一个TestSuite 实例。

    示例:将simple_test 中的用例装载到测试套件中

    suite=unittest.TestSuite()  #  创建测试套件
    suite.addTest(simple_test('test_add'))  # 添加测试用例
    suite.addTest(simple_test('test_divide'))  # 向套件中添加用例
    

    unittest.makeSuite根据文件批量创建测试套件,如果一个文件中有非常多测试用例,可以根据用例名称的相似性创建测试套件。

    unittest.makeSuite(testCaseClass, prefix)

    testCaseClass <Class类型>为测试用例类的名称

    prefix <str类型>用例相似的部分名称<str>

    示例:

    suite = unittest.makeSuite(simple_test, 'test')  # 创建并批量加载测试用例
    

    unittest.TestLoader()根据目录批量创建测试套件,可以指定用例存放目录,根据文件名称匹配测试用例。

    注意:用例存放的子目录中必须具备__init__.py 文件,否则无法加载用例。

    unittest.TestLoader().discover(start_dir, pattern='test*.py', top_level_dir=None)

    start_dir 要测试的模块名或测试用例目录。

    pattern='test*.py' 表示用例文件名的匹配原则。星号“*”表示任意多个字符。

    top_level_dir=None 测试模块的顶层目录。None <=> 测试用例不是放在多级目录中

    示例:

    suites=unittest.defaultTestLoader.discover('./testDirectory, pattern='*_test.py')
    

    suites=unittest.TestLoader().discover('./testDirectory, pattern='*_test.py')
    

    创建测试套件后,执行测试用例使用unittest.TextTestRunner().run(TestSuite)

    示例:执行加载simple_test用例的测试套件

    runner = unittest.TextTestRunner()
    runner.run(suite)  # 执行测试用例
    

    unittest.TestSuite() 的常用方法

    TestSuite.addTest 添加单个测试用例

    suite.addTest(simple_test('test_add')) 
    

    TestSuite.addTests通过序列添加测试用例

    suite.addTests([simple_test('test_add'),simple_test('test_divide')])
    

    TestSuite.countTestCases() 统计测试套件中的用例个数

    suite.countTestCases()
    

    测试套件灵活运用

    • 为测试用例文件添加suite 方法,方便加载测试套件

    示例:

    import unittest  # 导入unittest  包
    from unittest_doc.com.Calculator.Calculator import calculator  # 引入需要测试的包
    
    # 所有用例需继承TestCase类或者其子类
    class simple_test(unittest.TestCase):
       def setUp(self):
           print('@@@初始化test_simple@@@')
           self.a = calculator(1, 2)
    
       def test_add(self):
           print('---测试用例test_simple add---')
           self.assertEqual(self.a.minus(), -1, '两值不相等')
           self.assertEqual(self.a.add(), 3, '两值不相等')
           self.assertNotEqual(self.a.divide(), 1, '两值不相等')
    
       def test_divide(self):
           print('---测试用例test_simple divide---')
           self.assertEqual(self.a.divide(), 0.5)
    
       def tearDown(self):
           print('@@@结束test_simple@@@')
    
    def suite():  # 创建测试添加测试套件函数
       suite = unittest.TestSuite()  # 建立测试套件
       suite.addTests([simple_test('test_add'), simple_test('test_divide')])
    return suite
    
    if __name__ == '__main__':
       runner = unittest.TextTestRunner(verbosity=2)
       runner.run(suite())
    

    如上示例:创建测试套件函数,使用时直接调用其函数,不用额外添加用例。

    • 嵌套测试套件,多个测试套件组合在一起
    suite1 = unittest.TheTestSuite()
    suite2 = unittest.TheTestSuite()
    alltests = unittest.TestSuite((suite1, suite2))
  • 相关阅读:
    BigDecimal.setScale 处理java小数点
    JS判断用户手机是IOS还是Android
    h5 移动端 监听软键盘弹起、收起
    【java】查重类的实现
    MySQL ORDER BY IF() 条件排序
    版本回退
    Log4j 配置某个类中某个方法的输出日志到指定文件
    简单地实现文章的查重
    simhash算法
    mysql中 for update 使用
  • 原文地址:https://www.cnblogs.com/fu-yong/p/9889479.html
Copyright © 2011-2022 走看看