简单易懂的中文语法书(2022年5月29日学习笔记-基础语法)

python学习笔记-基础语法1、可通过的测试,下面我们就来聊聊关于简单易懂的中文语法书?接下来我们就一起去了解一下吧!

简单易懂的中文语法书(2022年5月29日学习笔记-基础语法)

简单易懂的中文语法书

python学习笔记-基础语法

第十一章 代码测试
  • 一、测试函数
  • 二、测试类
一、测试函数

1、可通过的测试

  • 导入模块unittest来提供代码测试工具
  • 创建一个继承unittest.TestCase()的类,用于包含一系列针对函数的单元测试
  • 使用unittest.main()来让Python运行这个文件中的测试

方法

描述

单元测试

用于核实函数的某个方面没有问题

全覆盖式测试

用例包含一整套单元测试,涵盖了何种可能的函数使用方式

self.assertEqual(A,B)

一种断言方法,将A的值与B相比较并反馈

def get_formatted_name(first,last): full_name = first ' ' last return full_name.title()

import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name = get_formatted_name('janis', 'joplin') self.assertEqual(formatted_name, 'Janis Joplin') if __name__ == '__main__': unittest.main() 输出结果为: Ran 1 test in 0.003s OK

2、不能通过测试

def get_formatted_name(first,middle,last): full_name = first " " middle ' ' last return full_name.title()

import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name = get_formatted_name('janis', 'joplin') self.assertEqual(formatted_name, 'Janis Joplin') if __name__ == '__main__': unittest.main() 输出结果为: Ran 1 test in 0.005s FAILED (errors=1) Error Traceback (most recent call last): File "D:\Python_Work\Python学习\Python编程-从入门到实践\测试name_function中的函数.py", line 5, in test_first_last_name formatted_name = get_formatted_name('janis', 'joplin') TypeError: get_formatted_name() missing 1 required positional argument: 'last'

3、测试未通过时的做法

  • 检查对函数的修改,找出导致函数行为不符合预期的修改,不要修改测试

def get_formatted_name(first,last,middle=''): if middle: full_name = first " " middle ' ' last else: full_name = first ' ' last return full_name.title()

import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name = get_formatted_name('janis', 'joplin') self.assertEqual(formatted_name, 'Janis Joplin') if __name__ == '__main__': unittest.main() 输出结果为: Ran 1 test in 0.002s Launching unittests with arguments python -m unittest D:/Python_Work/Python学习/Python编程-从入门到实践/测试name_function中的函数.py in D:\Python_Work\Python学习\Python编程-从入门到实践 OK

4、添加新测试

  • 在类中添加一个新方法即可

def get_formatted_name(first,last,middle=''): if middle: full_name = first " " middle ' ' last else: full_name = first ' ' last return full_name.title()

import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name = get_formatted_name('janis', 'joplin') self.assertEqual(formatted_name, 'Janis Joplin') def test_first_middle_last_name(self): formatted_name = get_formatted_name('wolfgang','mozart','amadeus') self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart') if __name__ == '__main__': unittest.main() 输出结果为: Ran 2 tests in 0.003s OK

二、测试类

1、各种断言方法

  • 只能在继承unittest.TestCase的类中使用这些方法

方法

描述

assertEqual(a,b)

核实 a ==b

assertNotEqual(a,b)

核实 a != b

assertTrue(x)

核实 x 为 True

assertFalse(x)

核实 x 为 False

assertIn(item,list)

核实 item 在 list中

assertNotIn(item,list)

核实 item 不在 list 中

2、一个要测试的类

class AnonySurvey(): def __init__(self,question): self.question = question self.responses = [] def show_question(self): print(self.question) def store_response(self,new_response): self.responses.append(new_response) def show_results(self): print("Survey results:") for response in self.responses: print("- " response)

测试类: import unittest from language_survery import AnonySurvey class TestAnonySurvey(unittest.TestCase): def test_store_single_response(self): question = input("What language did you first learn to speak?") my_survey = AnonySurvey(question) my_survey.store_response("English") self.assertIn('English',my_survey.responses) def test_store_three_responses(self): question = input("What language did you first learn to speak?") my_survey = AnonySurvey(question) responses = ['English','Spanish','Mandarin'] for response in responses: my_survey.store_response(response) for response in responses: self.assertIn(response,my_survey.responses) unittest.main() 输出结果为: Ran 2 tests in 0.000s OK

3、方法setUp()

  • unittest.TestCase()类包含方法setUp(),Python将运行之,创建一次对象,再运行各个以test_打头的方法

class AnonySurvey(): def __init__(self,question): self.question = question self.responses = [] def show_question(self): print(self.question) def store_response(self,new_response): self.responses.append(new_response) def show_results(self): print("Survey results:") for response in self.responses: print("- " response)

import unittest from language_survery import AnonySurvey class TestAnonySurvey(unittest.TestCase): def setUp(self): question = "What language did you first learn to speak?" self.my_survey = AnonySurvey(question) self.responses = ['English','Spanish','Mandarin'] def test_store_single_response(self): self.my_survey.store_response(self.responses[0]) self.assertIn(self.responses[0],self.my_survey.responses) def test_store_three_responses(self): for response in self.responses: self.my_survey.store_response(response) for response in self.responses: self.assertIn(response,self.my_survey.responses) if __name__ == '__main__': unittest.main() 输出结果为: Ran 2 tests in 0.002s OK

  • 方法setUp()做了两件事:创建一个调查对象,创建一个答案列表;存储这两样东西的变量名包含前缀self(即存储在属性中),因此可在这个类的任何地方使用。
  • 测试自己编写的类时,方法setUp()让测试方法编写起来更容易:可在setUp()方法中创建一系列实例并设置它们的属性,再在测试方法中直接使用这些事例。相比于在每个测试方法中都创建实例并设置其属性要容易得多。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页