2

我正在使用 PyHamcrest,但我认为这个问题与语言无关。

我想转:

assert_that(actual0, matcher0)
assert_that(actual1, matcher1)

成一个断言,这样如果两个断言都失败,错误消息就会这样说。这可以在 Hamcrest(或其他一些包/模块)中完成吗?

在 Python 中,我实现了:

def assert_all(*assertions):
    assertion_failed = False
    assertion_message = []

    for (actual, matcher) in assertions:
        try:
            hamcrest.assert_that(actual, matcher)
        except AssertionError as e:
            assertion_failed = True

            assertion_message.append(e.message)

    if assertion_failed:
        raise AssertionError(''.join(assertion_message))

所以我的测试会调用:

assert_all(
    (actual0, matcher0),
    (actual1, matcher1))

但我想知道是否已经有这样的实现。

4

2 回答 2

1

将值的一系列值(列表或元组)actual以及与参数相同数量的匹配器传递给contains

assert_that((actual0, actual1, ...), contains(matcher0, matcher1, ...))

匹配器列表按顺序应用于实际值的序列,一个接一个。所有必须匹配断言才能通过。

于 2012-05-11T21:50:36.120 回答
0

Hamcrest 断言旨在成为单个对象的匹配器,因此您所要求的内容很难优雅地融入模型。一般来说,我认为你拼凑在一起的任何解决方案看起来至少和单独的断言一样糟糕。就我而言,为了清楚起见,我更喜欢单独的断言。

于 2014-09-30T15:53:33.510 回答