初学者在测试Python代码,需要帮助!

初学者在测试Python代码,需要帮助!,python,testing,Python,Testing,我不做测试,但我想开始。我有一些问题: 使用unittest模块可以吗?据我所知,unittest模块将运行以test开头的任何方法 测试< /COD>”的目录),我将如何导入我正在测试的代码?我是否需要使用imp模块?以下是目录结构: src/ 测试可以使用unittest。此模块将为继承自unittest.TestCase的类运行以test开头的方法 无需使用imp模块-您的测试模块只需正常导入测试中的代码即可。您可能需要将src目录添加到您的路径: import sys sys.path.

我不做测试,但我想开始。我有一些问题:

  • 使用
    unittest
    模块可以吗?据我所知,
    unittest
    模块将运行以
    test
    开头的任何方法
  • <如果我有一个单独的测试目录(考虑一个名为“代码>测试< /COD>”的目录),我将如何导入我正在测试的代码?我是否需要使用
    imp
    模块?以下是目录结构: src/


    测试

    可以使用
    unittest
    。此模块将为继承自
    unittest.TestCase
    的类运行以
    test
    开头的方法

    无需使用
    imp
    模块-您的测试模块只需正常导入测试中的代码即可。您可能需要将
    src
    目录添加到您的路径:

    import sys
    sys.path.append('../src') # OnLinux  - use r'..\src' for Windows
    
    在导入任何模块之前,此代码将位于测试模块中

    更好的方法是使用OS环境变量
    PYTHONPATH

    (Windows)
    SET PYTHONPATH=path\to\module;python test.py

    (Linux)
    PYTHONPATH=path/to/module;python test.py


    unittest
    的另一种选择是。

    我对整个单独的测试目录问题有点问题

    我解决这个问题的方法是在源目录中有一个测试运行程序,代码如下:

    import sys, os, re, unittest
    
    # Run all tests in t/
    
    def regressionTest():
        path = os.path.abspath(os.path.dirname(sys.argv[0])) + '/t'
        files = os.listdir(path)
        test = re.compile("^t_.+\.py$", re.IGNORECASE)
        files = filter(test.search, files)
        filenameToModuleName = lambda f: 't.'+os.path.splitext(f)[0]
        moduleNames = map(filenameToModuleName, files)
        modules = map(__import__, moduleNames)
        modules = map(lambda name: sys.modules[name], moduleNames)
        load = unittest.defaultTestLoader.loadTestsFromModule
        return unittest.TestSuite(map(load, modules))
    
    suite = regressionTest()
    
    if __name__ == "__main__":
        unittest.TextTestRunner(verbosity=2).run(suite)
    
    然后我有一个名为
    t
    的文件夹,其中包含我所有的测试,名为
    t_uupy


    如果您需要Python单元测试入门方面的帮助,我可以推荐其他方法。

    使用Python代码启动测试的另一个好方法是使用模块,通过该模块,您可以在方法和类注释中包含测试。最妙的一点是,它们可以作为代码示例,因此也可以作为部分文档。也非常容易做到。

    正如Sebastian p所提到的,Mark Pilgrim的《Python单元测试模块》有很多章节介绍和使用Python的单元测试模块。我自己用这些章节开始测试

    我写了一篇博客描述。请注意,它解决了Vinay Sajip方法的缺点,如果您从测试模块所在的目录以外的任何地方调用该模块,则该方法将不起作用。一位读者在我的博客评论中也发布了一个不错的解决方案


    S.Lott在Vinay的帖子中暗示了一种使用
    PYTHONPATH
    的方法;我希望他能详细解释一下。

    不要弄乱
    sys.path.append()
    。使用PYTHONPATH,它要简单得多。我想你指的是sys.path。PYTHONPATH应该如何使用?实际上,nose不是unittest的替代品,而是它的一个增强/