在python中对序列执行单个unittest

2024-06-02 07:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个unittest,它可能会在某个序列上运行,在那里我检查序列上某些处理的结果。我不在乎哪一个失败的顺序我不在乎。 所以,不是写作

class MyTectClass(unittest.TestCase):
    .....
    def TestOverSequence(self):
        for elem in sequence:
             <run a bunch of asserts>

我想要点像

^{pr2}$

是否可行,如果可行-如何?在

提前谢谢

PS我可能会发出警告-但我宁愿失败的测试用例。在


Tags: runinselffor顺序def序列unittest
2条回答

你所说的,就是所谓的参数测试。向测试中添加一些注释性参数,测试系统根据参数重复测试。在您的示例中,它将是一个值列表,测试系统将对每个值重复测试。在

看起来python在它的测试系统中仍然没有这样的功能:https://bugs.python.org/issue7897

但我在这里找到了一些自助解决方案https://gist.github.com/mfazekas/1710455

我还发现,单独的测试框架pytest对参数测试https://docs.pytest.org/en/latest/example/parametrize.html有一定的支持

如果您想单独断言,那么为什么首先使用循环呢? {1>或者单独声明一条消息,但都没有成功。在

# ...
def testOverSequence(self):
    for elem in sequence:
        self.assertEqual(elem, 3, "{} is not equal to 3".format(elem)) # for instance

# Something on these lines

感谢所有试图提供帮助的人,但是在再次查看文档之后,我找到了我所需要的unittest.subTest() context manager。在

我一开始就应该看到的

class MyTectClass(unittest.TestCase):
    def _some_test(**kwargs):
       .......

    def TestOverSequence(self):
        for elem in sequence:
            with self.subTest(elem=elem)
                self._some_test(elem=elem)

谢谢你从我的肩膀后面看,哈哈(你知道,有时候要找到答案,你需要有人来帮你)

相关问题 更多 >