编写像Qunitjs这样的python测试

时间:2013-05-30 12:40:07

标签: python testing qunit pytest

我正试图在Python中找到类似于Qunit断言的方法。在Qunit中使用断言时,message参数以非常具有描述性的方式使用。

test( "test", function() {
  ok( fn([])==None, "Function should return 0 if no users" );
  ok( fn(["Test User"])==1, "Function should return 1 is users supplied" );
});
另一方面,Python的unittest模块使用message参数是一个更负面的上下文。这些仅在断言失败时显示。

class TestSequenceFunctions(unittest.TestCase):
    def test_choice(self):
        seq = range(10)
        element = random.choice(seq)
        self.assertTrue(element in seq, msg="Element not found in sequence")

Qunit的最终结果是有更清晰的成绩单可以与规范文件进行比较。

我意识到在Python中,也许可以通过写作来实现类似的方法

def test_choice_ensure_element_exists_in_sequence(self):

虽然不一样。输出没有以很好的方式呈现,然后测试生命周期为您要使用的每个标签执行设置和拆卸,这不一定是您想要的。

可能有一个库采用这种方法,所以也许这个问题已经解决了。 python unittest库或pytest似乎都不会以这种方式工作。

1 个答案:

答案 0 :(得分:0)

你的问题可能很简单,就是不了解单元测试库。我发现能够写

self.assertIn('s', (1,3,4))

非常简短,富有表现力和可读性。

如果在测试用例上使用正确的断言方法,那么很少需要添加自己的消息。 assertIn本身具有完全合理的输出:

AssertionError: 's' not found in (1, 3, 4)

所以不要写大量的评论/消息代码。我依赖于命名良好的断言和有用的默认消息。如果还没有提供一个名为断言和有用的错误消息,那么我扩展测试用例并添加我自己的。

self.assert_user_is_administrator(user)

非常易读且如果失败我会在一个位置提供一条好消息。