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

时间:2010-07-30 12:10:07

标签: python unit-testing testing

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

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

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

欢迎任何有关此主题的建议。

7 个答案:

答案 0 :(得分:95)

如果您对使用单元测试不熟悉,最简单的学习方法往往是最好的。在此基础上,我建议使用py.test而不是the default unittest module

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

示例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()

示例2(pytest):

def test_starting_out():
    assert 1 == 1

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

示例1(unittest):

cd /path/to/dir/
python test_unittesting.py

示例2(pytest):

cd /path/to/dir/
py.test

答案 1 :(得分:70)

免费的Python图书Dive Into Pythonchapter on unit testing您可能会觉得有用。

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

现在已经很晚了,但现在你知道下次了。 :)

答案 2 :(得分:37)

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

为了对所有这些进行比较,请阅读http://pythontesting.net/start-here处的每个介绍 还有关于灯具的更多文章,还有更多。

答案 3 :(得分:34)

unittest的文档将是一个很好的起点。

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

答案 4 :(得分:27)

unittest 附带标准库,但我建议您 nosetests

nose扩展了unittest,使测试更容易。

我还建议你 pylint

分析Python源代码,寻找质量不佳的错误和迹象。

答案 5 :(得分:8)

正如其他人已经回复的那样,编写单元测试已经很晚了,但也不算太晚。问题是您的代码是否可测试。实际上,要对现有代码进行测试并不容易,甚至还有一本关于此问题的书:Working Effectively with Legacy Code(请参阅key pointsprecursor PDF)。

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

答案 6 :(得分:3)

nosetests是python中单元测试的绝佳解决方案。它支持基于单元测试的测试用例和doctests,只需简单的配置文件即可开始使用它。