如何正确认识Python 源文件

开发 后端
在介绍Python 源文件构建脚本之前,首先先让大家认识下什么是Python,所谓Python语言:是一种面向对象、直译式计算机程序设计语言。

使用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 中的样例。

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

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

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

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

责任编辑:chenqingxiang 来源: IT168
相关推荐

2010-06-09 13:17:22

传输控制协议

2010-08-11 15:04:03

DB2备份

2010-05-17 09:35:10

MySQL 字符集

2018-05-08 09:39:57

区块链数字货币投资

2021-01-01 14:58:13

C语言C++编程

2010-09-28 14:23:29

网络诈骗

2010-03-30 12:59:19

WIFI无线联网技术

2012-02-16 10:26:46

TD-LTE

2010-08-11 10:06:39

DB2数据库

2010-08-04 17:10:37

DB2数据库

2012-12-04 13:51:27

鼎韬观点

2017-03-15 08:37:00

RS-485布线观念

2010-07-30 17:21:26

DB2数据库编目

2010-07-29 11:07:23

DB2分区兼容性

2017-03-13 08:29:19

2010-08-18 14:52:01

DB2数据库账户

2020-08-25 07:16:20

Python资源文件文件

2011-05-19 10:29:40

对象数据库关系数据库

2010-08-03 11:39:08

DB2分区兼容性

2010-05-10 09:29:28

点赞
收藏

51CTO技术栈公众号