如何开始为Python编写单元测试?

1qczuiv0  于 2023-05-27  发布在  Python
关注(0)|答案(4)|浏览(155)

我不做测试,但我想开始。我有几个问题:
1.可以使用unittest模块吗?据我所知,unittest模块将运行任何以test开头的方法。
1.如果我有一个单独的测试目录(考虑一个名为tests的目录),我将如何导入我正在测试的代码?我需要使用imp模块吗?下面是目录结构:
简体中文
测试/

gjmwrych

gjmwrych1#

用Python代码开始测试的另一个好方法是使用doctest模块,通过它可以在方法和类注解中包含测试。巧妙之处在于,这些代码作为代码示例,因此是部分文档。也非常容易做到。

y0u0uwnf

y0u0uwnf2#

可以使用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的替代方案是nose

xesrikrc

xesrikrc3#

正如塞巴斯蒂安P.所提到的,Mark Pilgrim的 * Dive Into Python * 有很多关于使用Python的unittest模块的unit testingtest-driven development的章节。我用这些章节来开始测试,我自己。
我写了一篇关于my approach to importing modules for testing的博客文章。请注意,它解决了VinaySajip方法的缺点,如果您从测试模块所在的目录以外的任何地方调用测试模块,则该方法将无法工作。一位读者在我的博客文章的评论中也发布了一个很好的解决方案。
S. Lott在Vinay的文章中暗示了一个使用PYTHONPATH的方法;我希望他会详细说明。

igetnqfo

igetnqfo4#

我有一个小问题与整个单独的目录测试的问题。
我解决这个问题的方法是在源代码目录中有一个测试运行器,代码如下:

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_<something>.py
如果你需要Python单元测试入门方面的帮助,我可以推荐the official documentationDive Into Python

相关问题