2013-03-29 11 views
3

현재 종속 규칙 위반 여부를 확인하기 위해 Degraph을 확장 중입니다.중요한 모든 테스트 라이브러리에 대해 matchers를 작성하는 방법은 무엇입니까?

지금까지 나는 ScalaTest에 대한 matcher를 만들었습니다. 왜냐하면 이것이 JVM을위한 내가 가장 좋아하는 테스트 라이브러리이기 때문입니다. 그러나 다른 많은 도서관은 다른 도서관을 선호하거나 사용해야합니다. 그래서 matchers (또는 그와 동등한 것이 무엇이든지)를 제공하고 싶습니다.

나는 게으르므로 생각할 수있는 모든 라이브러리에 대해 정규 표현식을 제공하고 싶지 않습니다.

그래서 질문은 :

모두 사용 (또는 대부분의/많은) 테스트 라이브러리를 할 수 있습니다 정규 라이브러리의 어떤 종류가 있습니까? 또는 다른 모든 libs에 대해 Hamcrest matchers를 matchers로 변환하는 래퍼일까요?

내가 (중요한 순서대로)을 지원하고자하는 라이브러리 :

  • JUnit을
  • ScalaTest
  • 가장 인기있는 테스트 라이브러리는 Clojure의
  • 에 대한 그루비
  • 가장 인기있는 테스트 라이브러리
  • 사양 2
  • TestNG
+0

Hamcrest에서 Specs2 로의 암시 적 변환을 발견했습니다. https://github.com/etorreborre/specs2/issues/114 –

+0

필요한 것을 더 명확하게 나타낼 수 있습니까? JUnit 4는 Hamcrest를 잠시 사용하고 있습니다. Hamcrest의'assertThat'과 필요한 matcher를 사용하십시오. 매처에 실패하면 (자), AssertionError가 throw되어 테스트에 실패합니다. 나는 다른 라이브러리와 똑같이 작동 할 것으로 기대한다. –

+0

알아,하지만 질문은 :이 matcher 다른 모든 주요 테스트 프레임 워크에서 사용할 수 있습니까? 모든 프레임 워크에서 지원되는 matcher 라이브러리를 사용할 수 있습니까? –

답변

1
  1. 내가 본 모든 단위 테스트 프레임 워크는 예외를 throw하는 테스트를 실패합니다.
  2. matcher.matches(value)false 인 경우 Hamcrest의 assertThat(T value, Matcher<T> matcher)AssertionError이됩니다.

따라서 Hamcrest는 대부분의 테스트 프레임 워크에서 즉시 작동해야합니다. 모의 객체 구축과 같은 다른 라이브러리의 경우 Hamcrest의 Matcher 객체를 기본적으로 사용하거나 통합 레이어를 작성해야합니다. 한 가지 방법은

ArgumentMatcher<T> decorate(final Matcher<T> matcher) { 
    return new ArgumentMatcher() { 
     public boolean <T> accepts(T value) { 
      return matcher.matches(value); 
     } 
    } 
} 

*이 이론적 비웃음 API를 사용하여 인위적인 예입니다, 예를 들어 *를 들어, 어떤 정규 표현을 장식하는 방법을 생성하는 것입니다.

+0

당신이 옳습니다. 나는 모든 테스트 프레임 워크에서 최소한 myMatcher.match (value)와 같은 것을 쓸 수 있다고 생각한다. –