py的交♂易

2018-03-15

2018-03-15  本文已影响0人  果轰桃

使用代码来测试代码

Python标准库中的unittest模块提供了代码的测试工具,单元测试用于核实函数的某个方面没有问题,使用时需要先导入模块、要测试的函数,再创建一个继承unittest.TestCase的类

测试函数

import unittest

def city_and_country(city_name,country_name,population_number = 0):
    """创建对应格式的"城市,国家",并返回"""
    if population_number:
        full_name = city_name.title() + ' , ' + country_name.title() + '  --  population ' + str(population_number)
    else:
        full_name = city_name.title() + ' , ' + country_name.title()
    return full_name

class NameTestCase(unittest.TestCase):
    """测试是否能正确运行"""

    def test_city_and_country(self):
        """测试city_and_country"""
        formatted_name = city_and_country('santiago', 'chile')
        self.assertEqual(formatted_name, 'Santiago , Chile')

    def test_city_and_country_population(self):
        """测试函数是否可以成功运行population"""
        formatted_name = city_and_country('xian','china',  population_number= 50000)
        self.assertEqual(formatted_name,'Xian , China  --  population 50000')

unittest.main()

测试类

常用断言方法
1.assertEqual(self, first, second, msg=None)
--判断两个参数相等:first == second
2.assertNotEqual(self, first, second, msg=None)
--判断两个参数不相等:first != second
3.assertIn(self, member, container, msg=None)
--判断是字符串是否包含:member in container
4.assertNotIn(self, member, container, msg=None)
--判断是字符串是否不包含:member not in container
5.assertTrue(self, expr, msg=None)
--判断是否为真:expr is True
6.assertFalse(self, expr, msg=None)
--判断是否为假:expr is False
7.assertIsNone(self, obj, msg=None)
--判断是否为None:obj is None
8.assertIsNotNone(self, obj, msg=None)
--判断是否不为None:obj is not None

测试类和函数的方法基本一致,但是需要注意测试类需要实例化

使用setUp()方法测试类(至需要实例化一次)

from unittest import TestCase

class Employee():
    """创建员工信息的类"""
    def __init__(self, first_name, last_name, salary):
        """初始化员工的姓、名、年薪"""
        self.firs_name = first_name
        self.last_name = last_name
        self.salary = salary

    def give_raise(self, others_salary = 0):
        """默认每年增加5000$薪水,也可以自定增加量"""
        if others_salary == 0:
            self.salary += 5000
        else:
            self.salary += others_salary
        return self.salary

class TestEmployee(TestCase):
    """测试employeeCLS是否成功运行"""
    def setUp(self):
        self.sample_employee = Employee('Van', 'Dark', 10000)
        self.increase_salary = 7000

    def test_give_raise(self):
        """测试不输入增加薪水量是否正确"""
        self.sample_employee.give_raise()
        self.assertEqual(self.sample_employee.salary, 15000)

    def test_give_actual_raise(self):
        """测试输入明确的薪水量是否正确"""
        self.sample_employee.give_raise(self.increase_salary)
        self.assertEqual(self.sample_employee.salary, 17000)

if __name__ == '__main__':
    TestCase

另,pycharm中的特殊情况

  1. 在实行unittest()时出现了No tests were found情况,这时需要去掉括号,即unittest就可以成功运行,原因我暂时还没弄明白23333333,有机会找大佬指点一下

  2. 使用pycharm简便操作可以快速实现单位测试,具体为:选定要测试的函数(类),按住ctrl+shift+T,弹出选择框,选择creat new test...,即可快速生成模版。eg:

    快速生成测试模版
  3. 也可使用另一种方法代替unittest.main

if __name__ == '__main__':
    TestCase

输入TestCase.main,选择第一个衍生出的框

快速生成执行操作
上一篇 下一篇

猜你喜欢

热点阅读