我不做测试,但我想开始。我有一些问题:
unittest
模块吗?据我所知,unittest
模块将运行以test
开头的任何方法。tests
的目录),我将如何导入我正在测试的代码?我需要使用imp
模块吗?这是目录结构:的src /
测试/
答案 0 :(得分:5)
使用Python代码开始测试的另一个好方法是使用doctest模块,在模块中包含方法和类注释中的测试。简洁的是,这些作为代码示例,因此,部分文档。非常容易做到。
答案 1 :(得分:4)
使用unittest
很好。对于继承自test
。
unittest.TestCase
开头的方法
无需使用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。
答案 2 :(得分:2)
我在测试问题的整个单独目录中遇到了一些问题。
我解决它的方法是在源目录中使用以下代码:
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 documentation和Dive Into Python等。
答案 3 :(得分:2)
如Sebastian P.所述,Mark Pilgrim的 Dive Into Python 使用Python的unittest模块在unit testing和test-driven development上有很好的章节。我自己用这些章节开始测试。
我写了一篇描述my approach to importing modules for testing的博文。请注意,它解决了Vinay Sajip的方法的缺点,如果你从任何地方调用测试模块,它将无法工作,但它所在的目录。一位读者也在我的博客文章的评论中发布了一个很好的解决方案。
S上。洛特暗示在Vinay的帖子中使用PYTHONPATH
的方法;我希望他会阐述它。