【问题标题】:Calling unit tests with arguments [duplicate]使用参数调用单元测试[重复]
【发布时间】:2019-11-12 02:50:18
【问题描述】:

我正在寻找一种方法来为那些输入及其结果发生变化的情况参数化单元测试,但编写另一个测试感觉太乏味了。

假设str.isalnum 函数正在测试中。可以为每个字符写一个案例。

class TestIsalnum(unittest.TestCase):
    def test_a(self):
        self.assertTrue('a'.isalnum())

    def test_dot(self):
        self.assertFalse('.'.isalnum())

    def test_comma(self):
        self.assertFalse(','.isalnum())

应该有更简单的方法。瞧:下面这个命名良好的函数设计为在使用 unittest.main() 时不会被自动执行的测试识别。

class TestIsalnum(unittest.TestCase):
    def tessst_with_params(self, char: str, value: bool):
        self.assertEqual(char.isalnum(), value)

    def test_not_alphanumerics(self):
        chars = '.,_;*!'

        for char in chars:
            self.tessst_with_params(char, False)

一切顺利,测试通过。但它被认为是 one 测试。直观地说,每个调用都应该是它自己的测试用例。此外,如果一个 case 失败,则不会执行后面的 case,并且 traceback 包含的信息非常少。

是否有编写此类测试的既定方法?如果没有,应该如何实施这些类型的测试?

将功能放在一行上会更简洁一些,但我不确定风格和优雅。

def test_dot(self): self.tessst_with_params('.', False)
def test_comma(self): self.tessst_with_params(',', False)

【问题讨论】:

  • 您可以尝试使用Hypothesis,这是一个与unittest集成并允许您指定参数的单元测试库。
  • @MichaelBianconi 谢谢!看起来不错,重复问题中提供的unittest.TestCase.subTest 解决方案似乎也很有用。

标签: python unit-testing python-unittest


【解决方案1】:

How do you generate dynamic (parameterized) unit tests in python? 可能重复

或者至少该问题可能有一些答案,我相信参数化模块是您在测试结果中所追求的冗长

【讨论】:

  • 我明白并同意。感谢您的链接!让我们把它作为重复的投票否决,好吗?
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
相关资源
最近更新 更多