如何正确认识Python 源文件
创始人
2024-06-23 12:00:38
0

使用Python 源文件在构建脚本的底部,可以定义 compile 目标,Python 源文件内在元素是 compile 运行期间执行的任务,特别的是 py-compile 任务,它负责从 src 目录开始,编译所有的 Python 代码。

该任务会递归遍历所有的子目录,并编译所有的 Python 模块。脚本中没有采用将 src 目录硬编码到调用之处的方式,而是在构建脚本中定义了称为 src.dir 的属性。然后,在需要使用这个目录名的时候。

就可以通过 ${src.dir} 来引用。 要运行构建脚本,可从 Eclipse 中打开它。Eclipse 具有内置的 Ant 构建脚本编辑和浏览功能。Outline 视图可以显示出构建脚本的结构。在 Navigator 视图中。

选择该构建脚本,用右键点击,然后选择“Run Ant...”。选择 compile 目标,然后点击“Run”。构建脚本执行过程中的输出信息应该显示在 Console 视图中,表示运行成功。 从对上述 pydoc 目标的解析可看出。#t#

第 7 行声明了目标名称,并指出它依赖于 init 和 compile 目标。这意味着在运行 pydoc 目标之前,Ant 必须保证 init 和 compile 目标已经运行,如果没有,则首先运行这两个目标。

pydoc 目标所依赖的 init 目标在第 3 至第 5 行定义。 init 目标仅仅创建了一个存放 PyDoc API 文档文件的目录。如前所述,要为所生成文档的保存位置定义一个属性,名为 pydoc.dir。

第 8 行开始是 py-doc 任务。如前所述,您传入生成 pydoc 过程中所使用的 PYTHONPATH 。 destdir 属性告诉 py-doc 任务将生成的 HTML 文档输出到何处。 第 9 至第 11 行定义了在生成文档的过程中应该处理哪些 Python 源文件。文件集是 Ant 脚本中通用的结构。

可用于定义所操作的一组文件。这是一种很强大的特性,它使您能够通过名字模式、布尔逻辑和文件属性来选择所要操作的文件。Ant 文档中有这方面的完整描述。本例中递归选择了“src”目录下的所有文件。

Python 源文件中具有标准的单元测试框架(从 Python 2.3 开始。在 Python 2.2 中这只是可选模块),与 Java jUnit 框架十分类似。测试用例的结构与 jUnit 采用相同的方式。每一个待测试的类和模块通常都具有自己的测试类。测试类中包含测试装置(fixture)。

它们在 setUp 函数中初始化。每一个测试都编写为测试类中的一个独立的测试函数。unittest 框架会在测试函数之间循环往复,先调用 setUp 、再测试函数、然后清除( tearDown )测试函数。请参阅清单 4 中的样例。

  1. import unittest  
  2. from pprint import pprint  
  3. import feedparser  
  4. class FeedparserTest(unittest.TestCase):  
  5.     """  
  6.     A test class for the feedparser module.  
  7.     """  
  8.       
  9.     def setUp(self):  
  10.         """  
  11.         set up data used in the tests.  
  12.         setUp is called before each test function execution.  
  13.         """  
  14.         self.developerWorksUrl = "testData/developerworks.rss"         
  15.     def testParse09Rss(self):  
  16.         """  
  17.         Test a successful run of the parse function for a  
  18.         0.91 RSS feed.  
  19.         """  
  20.         print "FeedparserTest.testParse09RSS()"  
  21.           
  22.         result = feedparser.parse(self.developerWorksUrl)  
  23.         pprint(result)  
  24.         self.assertEqual(0, result['bozo'])  
  25.           
  26.         self.assert_(result is not None)  
  27.         channel = result['channel']  
  28.         self.assert_(channel is not None)  
  29.         chanDesc = channel['description']  
  30.         self.assertEqual(u'The latest content from IBM developerWorks',  
  31.             chanDesc)  
  32.           
  33.         items = result['items']  
  34.         self.assert_(items is not None)  
  35.         self.assert_(len(items)> 3)  
  36.         firstItem = items[0]  
  37.         title = firstItem['title']  
  38.         self.assertEqual(u'Build installation packages with   
  39.             solution installation and deployment technologies',  
  40.             title)  
  41.     
  42.     def tearDown(self):  
  43.         """  
  44.         tear down any data used in tests  
  45.         tearDown is called after each test function execution.  
  46.         """  
  47.         pass  
  48.                   
  49. if __name__ == '__main__':  
  50.     unittest.main()  

上述清单是实现 feedparser 模块基本测试功能的测试类。完整的测试类见 feedParserTest 项目下的 src/feedparserTest/FeedparserTest.py。step 函数负责准备整个测试过程中需要使用的测试装置,在本例中只有测试用的 RSS 文件的目录。

测试函数将对其进行解析。testParse09Rss 是真正的测试函数。Python 源文件这个函数调用 feedparser.parse 函数,传递测试用的 RSS 文件,输出解析结果,并通过 TestCase 类的 assert 函数执行基本的检查统作。

如果任何 assert 的求值结果不是真,或是在执行过程中抛出任何异常,unittest 就会报告一次测试失败或错误。***的两行负责在这个测试类内部运行测试,方法是直接运行该模块即可。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...