html tool

2014年5月29日星期四

unittest使用了解_quodlibet_test_windows.py_

开始看quodlibet [https://code.google.com/p/quodlibet/] 的unittest部分的源码,想了解一下不同项目的unittest的构建是如何做的,以及unittest细节上的data要求和流程要求,还有一个项目是pychess [https://code.google.com/p/pychess/]都是在code.google.com上托管的开源项目,下面是quodlibet 的test_windows.py 部分导入内容,打算做一个系列的文章,希望可以写完吧,不过不求全,求精细和惊喜:)

------------------------------------------------------------

from tests import TestCase, DATA_DIR, skipUnless

  •        [popexizhi]
    tests dir 的__init__.py的定义
    • + - 1.TestCase
      • 其中TestCase为如下: (这里应该是重新定义了unittest的断言函数的名称,eg:assertTrue改名叫做fail Unless,可以翻译为失败的不存在吗?好日语啊:)嘻嘻,开玩笑呢,不过后面在看看,应该是公司内部的要求吧:))
        from unittest import TestCase as OrigTestCase

        class TestCase(OrigTestCase):

            # silence deprec warnings about useless renames
            failUnless = OrigTestCase.assertTrue
            failIf = OrigTestCase.assertFalse
            failUnlessEqual = OrigTestCase.assertEqual
            failUnlessRaises = OrigTestCase.assertRaises
            failUnlessAlmostEqual = OrigTestCase.assertAlmostEqual
            failIfEqual = OrigTestCase.assertNotEqual
            failIfAlmostEqual = OrigTestCase.assertNotAlmostEqual
    • 2.DATA_DIR
      • + - 在原文件中定义如下:
        DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data")
        • 其中os.path.realpath()为
          os.path.realpath(path)
          Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path  (if they are supported by the operating system).
          New in version 2.2.
          是防止挂载,快捷方式之类的吧
          os.path.dirname()如下:(查找指定地址的文件夹用的)
          os.path.dirname(path)
          Return the directory name of pathname path. This is the first half of the pair returned by split(path).
          os.path.join()看下面应该是把路径修改为(c:foo)的效果,将地址中的\或/都去掉了
          os.path.join(path1[, path2[, ...]])
          Join one or more path components intelligently. If any component is an absolute path, all previous components (on Windows, including the previous drive letter, if there was one) are thrown away, and joining continues. The return value is the concatenation of path1, and optionally path2, etc., with exactly one directory separator (os.sep) inserted between components, unless path2 is empty. Note that on Windows, since there is a current directory for each drive, os.path.join("c:", "foo")  represents a path relative to the current directory on drive C: (c:foo), not c:\foo.
        [ok-?]
        这里有一个新问题__file__,在哪里定义啊?__init__文件中查询没有,到上一级quodlibet.py中也没有,记得看goagent的local端源码时就有这个问题,这个__file__到底是什么呢?看下划线__还像是类的内置成员变量,郁闷。
        [go]了一下,ok,参见:http://taoyh163.blog.163.com/blog/static/195803562008529031652/
        自己测试了一下__file__存储内容是与调用时使用的地址一致,要用绝对路径就只能使用
        os.path.realpath(__file__)

        就是 文件内置的一个变量,应该是调用时传入的第一个参数argv[0]
        但是参见:http://blog.csdn.net/witsmakemen/article/details/22675279 (这里给了不同的例子)

        __file__和argv[0]差异

        在主执行文件中时,两者没什么差异,不过要是在不同的文件下,就不同了

        help定义如下:(be the “path” to the file ,内嵌模块时处理不一样)
        __file__ is to be the “path” to the file unless the module is built-in (and thus listed in sys.builtin_module_names) in which case the attribute is not set

    • 3. skipUnless
      • 这个是个类
        def skipUnless(value, reason=None):
            def dec(cls):
                if value:
                    return cls
                return skip(cls, reason=reason)
            return dec
        但看Unless突然想到刚才的unittest定义,不知是否有关,这个要看后文了    

没有评论:

发表评论