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, ...))

マッチャーのリストは、実際の値のシーケンスに 1 つずつ順番に適用されます。アサーションが合格するには、すべてが一致する必要があります。

于 2012-05-11T21:50:36.120 に答える
0

Hamcrest のアサーションは、単一のオブジェクトのマッチャーであることを意図しているため、求めているものをモデルにうまく適合させることは困難です。一般に、あなたがまとめて解決する解決策は、少なくとも個別の主張と同じくらい悪く見えると思います。私としては、明確にするために個別のアサーションを好みます。

于 2014-09-30T15:53:33.510 に答える