我不做测试,但我想开始。我有几个问题:1.可以使用unittest模块吗?据我所知,unittest模块将运行任何以test开头的方法。1.如果我有一个单独的测试目录(考虑一个名为tests的目录),我将如何导入我正在测试的代码?我需要使用imp模块吗?下面是目录结构:简体中文测试/
unittest
test
tests
imp
gjmwrych1#
用Python代码开始测试的另一个好方法是使用doctest模块,通过它可以在方法和类注解中包含测试。巧妙之处在于,这些代码作为代码示例,因此是部分文档。也非常容易做到。
y0u0uwnf2#
可以使用unittest。这个模块将为从unittest.TestCase继承的类运行以test开头的方法。不需要使用imp模块-您的测试模块将正常导入测试中的代码。您可能需要将src目录添加到路径中:
unittest.TestCase
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.pyunittest的替代方案是nose。
PYTHONPATH
SET PYTHONPATH=path\to\module; python test.py
PYTHONPATH=path/to/module; python test.py
xesrikrc3#
正如塞巴斯蒂安P.所提到的,Mark Pilgrim的 * Dive Into Python * 有很多关于使用Python的unittest模块的unit testing和test-driven development的章节。我用这些章节来开始测试,我自己。我写了一篇关于my approach to importing modules for testing的博客文章。请注意,它解决了VinaySajip方法的缺点,如果您从测试模块所在的目录以外的任何地方调用测试模块,则该方法将无法工作。一位读者在我的博客文章的评论中也发布了一个很好的解决方案。S. Lott在Vinay的文章中暗示了一个使用PYTHONPATH的方法;我希望他会详细说明。
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 documentation和Dive Into Python。
t
t_<something>.py
4条答案
按热度按时间gjmwrych1#
用Python代码开始测试的另一个好方法是使用doctest模块,通过它可以在方法和类注解中包含测试。巧妙之处在于,这些代码作为代码示例,因此是部分文档。也非常容易做到。
y0u0uwnf2#
可以使用
unittest
。这个模块将为从unittest.TestCase
继承的类运行以test
开头的方法。不需要使用
imp
模块-您的测试模块将正常导入测试中的代码。您可能需要将src
目录添加到路径中:在导入任何模块之前,此代码将位于测试模块中。
更好的方法是使用OS环境变量
PYTHONPATH
。(Windows)
SET PYTHONPATH=path\to\module; python test.py
(Linux)
PYTHONPATH=path/to/module; python test.py
unittest
的替代方案是nose。xesrikrc3#
正如塞巴斯蒂安P.所提到的,Mark Pilgrim的 * Dive Into Python * 有很多关于使用Python的unittest模块的unit testing和test-driven development的章节。我用这些章节来开始测试,我自己。
我写了一篇关于my approach to importing modules for testing的博客文章。请注意,它解决了VinaySajip方法的缺点,如果您从测试模块所在的目录以外的任何地方调用测试模块,则该方法将无法工作。一位读者在我的博客文章的评论中也发布了一个很好的解决方案。
S. Lott在Vinay的文章中暗示了一个使用
PYTHONPATH
的方法;我希望他会详细说明。igetnqfo4#
我有一个小问题与整个单独的目录测试的问题。
我解决这个问题的方法是在源代码目录中有一个测试运行器,代码如下:
然后我有一个名为
t
的文件夹,其中包含我所有的测试,名为t_<something>.py
。如果你需要Python单元测试入门方面的帮助,我可以推荐the official documentation和Dive Into Python。