用Python编写单元测试:我该如何开始?

use*_*312 523 python testing unit-testing

我用Python完成了我的第一个正确的项目,现在我的任务是为它编写测试.

由于这是我第一次做项目,这是我第一次为它编写测试.

问题是,我该如何开始?我完全不知道.任何人都可以指向我一些文档/教程/链接/书籍,我可以用它来开始编写测试(我猜特别是单元测试)

任何建议都会受到欢迎.

Tim*_*ara 100

如果您对使用单元测试不熟悉,最简单的学习方法通​​常是最好的.在此基础上,我建议使用py.test而不是默认unittest模块.

考虑这两个例子,它们做同样的事情:

例1(unittest):

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

例2(pytest):

def test_starting_out():
    assert 1 == 1
Run Code Online (Sandbox Code Playgroud)

假设两个文件都已命名test_unittesting.py,我们如何运行测试?

例1(unittest):

cd /path/to/dir/
python test_unittesting.py
Run Code Online (Sandbox Code Playgroud)

例2(pytest):

cd /path/to/dir/
py.test
Run Code Online (Sandbox Code Playgroud)

  • 我在多个地方听说过py.test的简单性(http://docs.python-guide.org/en/latest/writing/tests/#py-test,https://docs.python.org/3.5 /library/unittest.html#module-unittest,https://jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/)为什么`unit-test`仍然包含在标准库,如果`py.test`和`nose`提供相同的功能和更简单的接口?它只是提供向后兼容性,还是`unittest`具有`py.test`和`nosetest`无法提供的一些优点? (5认同)
  • @alpha_989 标准 python 库不打算包含可用的最佳工具。这就是 PyPI 的用途。标准的`unittest` 包仍然足够好。它是*标准*,这意味着它可以保证运行良好。最后,任何使用您代码的人都不需要安装额外的软件包。 (2认同)

Mar*_*ers 71

免费的Python书Dive Into Python有一你可能觉得有用的单元测试.

如果您遵循现代实践,您应该在编写项目时编写测试,而不是等到项目即将完成.

现在迟到了,但现在你知道下次了.:)

  • 我仍然会说,如果你想重构没有单元测试的代码,你应该先为它编写单元测试 (13认同)
  • 是的,很多第一次来到单位测试的人听到老手所说的"嗯,这对你现在的项目来说太迟了":即使这不是他们真正想要说的,那就是新手听到的.这就像中国关于种树的谚语:开始测试的最佳时间是项目的开始; 现在是开始测试的第二好时机! (8认同)
  • 潜入Python链接被打破... :-( (4认同)
  • 潜入python域似乎已经过期,但是可以通过web.archive.org进行救援:https://web.archive.org/web/20171218185744/http://www.diveintopython.net/unit_testing/index.html (2认同)

Okk*_*ken 38

在我看来,有三个很棒的python测试框架,很适合检查.
unittest - 模块标配所有python发行版
nose - 可以运行unittest测试,并且具有较少的样板.
pytest - 还运行单元测试,具有更少的样板,更好的报告,许多很酷的额外功能

为了更好地比较所有这些,请在http://pythontesting.net/start-here上阅读每个介绍.
还有关于灯具的扩展文章,还有更多.


Jus*_*ier 34

对于文档单元测试将是一个良好的开端.

此外,现在有点晚了,但将来请考虑在项目本身之前或期间编写单元测试.这样你可以使用它们进行测试,并且(理论上)你可以将它们用作回归测试,以验证你的代码更改没有破坏任何现有代码.这将为您提供编写测试用例的全部好处:)


sso*_*ler 27

单元测试自带的标准库,但我会建议你nosetests.

" 鼻子扩展了unittest,使测试更容易. "

我也会推荐你的pylint

" 分析Python源代码,寻找质量差的错误和迹象. "


phi*_*ant 8

正如其他人已经回复的那样,编写单元测试已经很晚了,但也不算太晚.问题是您的代码是否可测试.实际上,要对现有代码进行测试并不容易,甚至还有一本关于此的书:与遗留代码有效合作(参见关键点前言PDF).

现在编写单元测试或不是你的电话.你只需要意识到这可能是一项乏味的任务.您可以解决这个问题,以学习单元测试或首先考虑编写接受(端到端)测试,并在更改代码或向项目添加新功能时开始编写单元测试.

  • +1"与遗产代码有效合作".这都是关于没有测试的代码. (2认同)