初学者在测试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
开头的任何方法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的替代品,而是它的一个增强/