代码之家  ›  专栏  ›  技术社区  ›  The Illusive Man

给定一个参数化测试,我如何才能为所有参数只打印一次消息?

  •  1
  • The Illusive Man  · 技术社区  · 7 年前

    假设此示例代码:

    @pytest.mark.parametrize('foo', ['foo1', 'foo2', 'foo3'])
    def test_foo(foo):
        print('Testing foo')
        data = ['bar1', 'foo1', 'bar2']
        assert foo in data, 'Error: {} is not in data'.format(foo)
    

    运行pytest时,输出为:

    Testing foo
    Testing foo
    Error: foo2 is not in data
    Testing foo
    Error: foo3 is not in data
    

    是否可以对所有参数仅显示一次测试消息,以便输出:

    Testing foo
    Error: foo2 is not in data
    Error: foo3 is not in data
    

    我的实际代码使用了大约10个参数,因此重复10次消息会非常烦人,并且会给输出增加很多噪音。

    1 回复  |  直到 7 年前
        1
  •  0
  •   The Illusive Man    7 年前

    我刚意识到这个问题毫无意义。即使只有一个测试,每个参数都会在一个独立的测试实例中转换它,因此每次测试只显示一条消息是没有意义的。

    输出是正确的,因为它类似于:

    ====== test_foo(foo2) ======
    Testing foo
    Error: foo2 is not in data
    
    ====== test_foo(foo3) ======
    Testing foo
    Error: foo3 is not in data
    

    无论如何,为了回答我的问题,@hoefling和@ballpointben这两种方法都有效。就我个人而言,我更喜欢@ballpointben的方式,因为你不需要匹配 if 在某个时候您可能决定删除的参数。