0

我正在尝试在 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 似乎都不能以这种方式工作。

4

1 回答 1

0

您的问题可能只是对 unittest 库还不够了解。我发现能写

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

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

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

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

因此,与其编写大量注释/消息代码。我依靠命名良好的断言与有用的默认消息相结合。如果尚未提供命名良好的断言和有用的错误消息,那么我扩展测试用例并添加我自己的。

self.assert_user_is_administrator(user)

非常易读,如果我仅在一个位置提供失败,它将有一个很好的消息。

于 2013-05-30T12:54:30.350 回答