2012-05-07 1 views
1

저는 PyHamcrest를 사용하고 있습니다.하지만이 질문은 언어에 무관심하다고 생각합니다.햄스터 (Hamcrest)에서 여러 assert_that를 결합하는 방법은 무엇입니까?

나는 회전 싶습니다 :

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

을 하나의 어설로 두 주장이 실패 할 경우, 오류 메시지가 이렇게 말한다 있도록. Hamcrest (또는 다른 패키지/모듈)에서이 작업을 수행 할 수 있습니까?

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

하지만 이미이 같은의 구현이 있는지 궁금하네요 :

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

그래서 내 테스트가 부를 것이다 : 파이썬에서

은, 내가 구현했습니다.

답변

1

actual 값에 대한 값들의 시퀀스 (목록 또는 튜플) 및 contains 매개 변수로 정합 기의 동일한 수의 패스 : 정합 기의리스트는 실제 값들의 시퀀스를 순서대로인가

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

, 하나씩. 모든 주장이 일치해야합니다.

+0

두 어설 션이 모두 실패하면 첫 번째 어설 션 만보고됩니다. –

+0

일반적으로 실제 값은 이미 시퀀스로 메서드에 의해 반환됩니다. 귀하의 예제 에서처럼 어설 션을 두 개의 개별 값에 결합하려는 이유는 모르겠지만 구체적인 예를 들어 보면 더 잘 설명 할 수 있습니다. Hamcrest matchers는 조롱 방법과 같은 주장 이상의 용도로 사용됩니다. –

+0

프로젝트 티켓을 열어주세요. –

0

Hamcrest 어서션은 단일 객체의 matchers를 대상으로하므로 모델에 우아하게 맞추기가 어렵습니다. 일반적으로, 나는 여러분이 함께 골치를 썩히는 해결책이 적어도 별개의 단언만큼 나쁘지는 않을 것이라고 생각합니다. 필자는 명확성을 위해 별도의 주장을 선호한다.

관련 문제