使用参数调用单元测试

时间:2019-07-01 12:33:37

标签: python unit-testing python-unittest

我正在寻找一种方法来针对那些输入及其结果发生变化的情况对单元测试进行参数化,但是编写另一种测试感觉太麻烦了。

假设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)

一切都很好,测试通过了。但这被认为是一个测试。直观地,每个调用应该是其自己的测试用例。此外,如果一种情况失败,则不会执行之后的情况,并且回溯中包含的信息也很少。

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

将功能放在一行上会更简洁一些,但是我不确定样式和优雅程度。

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

1 个答案:

答案 0 :(得分:0)

可能是How do you generate dynamic (parameterized) unit tests in python?的副本

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