用于在多个fixture上重复测试函数的快速unittest兼容框架

repeated-test的Python项目详细描述


Join the chat at https://gitter.im/epsy/repeated_testhttps://travis-ci.org/epsy/repeated_test.svg?branch=masterhttps://coveralls.io/repos/github/epsy/repeated_test/badge.svg?branch=master

repeated_test允许您很好地编写将相同函数应用于 多组参数。

例如:

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,expected,*terms):self.assertEqual(expected,sum(terms))a=10,5,5b=15,7,8c=42,1,1

结果与unittest兼容,并在 出错时的回溯:

$ python -m unittest my_tests
..F
======================================================================
FAIL: test_c (my_tests.my_fixtures)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "my_tests.py", line 9, in my_fixtures
    c = 42, 1, 1
  File "my_tests.py", line 5, in _test
    self.assertEqual(expected, sum(terms))
AssertionError: 42 != 2

----------------------------------------------------------------------
Ran 3 tests in 0.002s

FAILED (failures=1)

您可以使用:

$ pip install --user repeated_test

帮助/问题

你可以在 gitter.im chatroom

如果您发现任何问题或有任何请求,请使用 GitHub Issues

参考

简介

python的unittest模块有助于执行各种形式的自动化测试。 一个编写从unittest.TestCase派生的类,并添加各种test_xyz方法, 测试运行者运行这些测试,记录成功的测试,失败的 测试并跟踪这些失败的原因。

有时进行一次大规模的测试是有意义的 不同的输入。本单元旨在提供处理 这种情况。

它允许您将fixture(输入)作为 类,并将测试函数绑定到它们。对每个 你将看到下面的固定装置。生成的类是一个unittest.TestCase子类,所以它是 与unittest和其他unittest兼容的测试运行程序兼容。

构建测试用例

为了生成unittest.TestCaserepeated_test要求您:

  • 子类repeated_test.Fixtures
  • 编写一个_test方法,它使用一些参数 unittest.TestCase它需要的方法
  • 直接在类主体中分配fixture,然后将其解包为 _test方法的参数

您可以在测试函数中使用任何unittest.TestCase方法,例如assertEqual() 诸如此类。

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,arg1,arg2,arg3):self.assertEqual(...,...)Ps='p1','p2','p3'# _test(*Ps) will be called, ie. _test('p1', p2', 'p3')Qs='q1','q2','q3'# _test(*Qs) will be called, ie. _test('q1', q2', 'q3')

确保fixture元组提供正确数量的参数 对于您的_test方法,除非它有一个*args参数。

命名和转义

您可以根据自己的喜好命名测试元组,尽管它们可能不是以 test__。它们被复制到生成的unittest.TestCase类中,并测试 为它们创建方法。它们的名字是元组的名字,前缀是 test_

test__开头的成员直接复制到 生成的unittest.TestCase类,而不被视为fixture。你可以用这个 在您的fixture或您不希望的常量中插入常规测试 作为测试:

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,arg1,arg2,arg3):self.assertEqual(...,...)deftest_other(self):self.assertEqual(3,1+2)_spam='spam, bacon and eggs'# _spam won't be treated as a fixture, so _test(*_spam) won't be calledham=_spam,_spam,_spam

如果需要,甚至可以使用self._test(...)调用测试函数。

分离测试和设备

可以使用fixtures类 with_test方法:

classmy_fixtures(Fixtures):_test=None...@my_fixtures.with_testdefother_test(self,arg1,arg2,arg3):self.assertEqual(...,...)

当函数出现在任何类之外时,它将用作 生成的unittest.TestCase类,因此请记住它需要一个self参数。

您可以任意多次重用fixture类。

如果这样指定测试函数,则可以设置_test = None 在你的装置定义中。但是,它不会被unittest发现, 所以regular test methods不会运行。 省略_test会完全引发错误,以防止意外发生 禁用测试。

将函数用作fixture

在fixture元组中使用函数 计划。如果fixture元组中有一个函数,则可以 使用tupdecorator:

fromrepeated_testimportFixtures,tupclassmy_tests(Fixtures):def_test(self,func,arg1,arg2):self.assertEqual(...,...)@tup('arg1','arg2')defham():pass# equivalent todef_ham():passham=_ham,'arg1','arg2'
用另一个类替换unittest.testcase

可以使用WithTestClass(cls)将unittest.testcase替换为另一个类。

例如,如果您想使用unittest2

importunittest2fromrepeated_testimportWithTestClassclassmy_tests(WithTestClass(unittest2.TestCase)):...

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这个方法会重复它的循环?   swing如何在Java中拖放鼠标时获取鼠标信息?   java如何处理异常并向SSE客户端发送错误   java在一个我一直试图制作的简单计算器上遇到了问题   java如何使用黄瓜。类和参数化。在同一个跑步者级别上   测试并发性的javajunit   java致命错误:jenkins的身份验证失败   只要我修改服务器,java SSE客户端就会停止工作(服务器发送事件)   java通过JSP获取JSON到JS   java在3d应用程序中集成卫星图像或地图   如何为Java8语言环境实现自己的自定义国家名称列表   java SonarLint | SonarQube批量创建@SuppressWarnings   java删除填充矩形   java hibernate一对多出错,外键错误   java如何获取图像是否被触摸而不是透明背景?LIBGDX   JAVA网SocketException:使用Tomcat重置连接   如何使用java检查文件是SSL证书还是常规文件?   java如何在安卓中使用类似C#等的文件选择器或openfiledialog打开文本文件   java非静态createnewfrom方法?   类在java中将具有多个变量类型的对象传递到arraylist时遇到问题