当前位置: 首页 > 面试题库 >

如何在python中生成动态(参数化)单元测试?

盖向荣
2023-03-14
问题内容

我有某种测试数据,并且想要为每个项目创建一个单元测试。我的第一个想法是这样做:

import unittest

l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]

class TestSequence(unittest.TestCase):
    def testsample(self):
        for name, a,b in l:
            print "test", name
            self.assertEqual(a,b)

if __name__ == '__main__':
    unittest.main()

这样做的缺点是它可以在一次测试中处理所有数据。我想即时为每个项目生成一个测试。有什么建议么?


问题答案:

我用这样的东西:

import unittest

l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]

class TestSequense(unittest.TestCase):
    pass

def test_generator(a, b):
    def test(self):
        self.assertEqual(a,b)
    return test

if __name__ == '__main__':
    for t in l:
        test_name = 'test_%s' % t[0]
        test = test_generator(t[1], t[2])
        setattr(TestSequense, test_name, test)
    unittest.main()

parameterized软件包可用于自动执行此过程:

from parameterized import parameterized

class TestSequence(unittest.TestCase):
    @parameterized.expand([
        ["foo", "a", "a",],
        ["bar", "a", "b"],
        ["lee", "b", "b"],
    ])
    def test_sequence(self, name, a, b):
        self.assertEqual(a,b)

将会生成测试:

test_sequence_0_foo (__main__.TestSequence) ... ok
test_sequence_1_bar (__main__.TestSequence) ... FAIL
test_sequence_2_lee (__main__.TestSequence) ... ok

======================================================================
FAIL: test_sequence_1_bar (__main__.TestSequence)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/parameterized/parameterized.py", line 233, in <lambda>
    standalone_func = lambda *a: func(*(a + p.args), **p.kwargs)
  File "x.py", line 12, in test_sequence
    self.assertEqual(a,b)
AssertionError: 'a' != 'b'


 类似资料:
  • 问题内容: 有什么工具可以自动生成 Java 代码的单元测试? 更新: 主要用途是为将要重构的遗留代码快速生成单元测试。自动生成后,无需自动使测试与代码保持同步。 在这里提出了几乎相同的问题,但是答案是.NET而不是Java(Pex是公认的答案): 问题答案: CodePro Analytix有一个JUnit测试生成模块,听起来像它可以完成您想要的。请参阅《用户指南》。 [CoView]是价格合理

  • 问题内容: 鼻子测试框架(适用于python)支持在运行时动态生成测试用例(以下为文档,从五个不同的测试用例中得出结果): 如何使用诸如mocha或qunit之类的javascript框架实现此结果?(目前我还没有加入任何特定的框架。) 我的用例是编写一个测试运行器,以监视外部服务器上的多个项目。我将提供资源URL列表。每个测试都会尝试轮询该资源,并根据发现的内容返回成功或失败。我有一个内置在py

  • 是否可以在参数化测试的执行过程中保留对变量所做的更改? 我有一个简单的日历,存储添加到它的事件: 为了测试它在后续调用中是否有效,我需要在测试中多次调用它: 这很好。但是,我不能用参数化测试来代替它: 问题是,在每次测试执行后都会重新初始化,因此之前添加的事件会丢失。当然,在测试方法中移动初始化也没有帮助。 这有可能吗?

  • 本文向大家介绍在Python中进行自动化单元测试的教程,包括了在Python中进行自动化单元测试的教程的使用技巧和注意事项,需要的朋友参考一下 一、软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施。正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状态开

  • 我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT

  • 问题内容: 在JUnit4中,您可以通过在一种方法中提供参数集合来编写参数化的单元测试,这些参数将被传递给测试的构造函数,并通过另一种方法进行测试。如果我有一个预期引发异常的参数,该如何指定? 问题答案: