햄크레스트

Hamcrest

Hamcrest는 Java 프로그래밍 언어로 소프트웨어 테스트를 작성하는 것을 지원하는 프레임워크입니다.커스터마이즈된 어설션 매처('Hamcrest'는 '매처'의 아나그램) 작성을 지원하므로 일치 규칙을 [1]선언적으로 정의할 수 있습니다.이들 매처는 JUnit 및 jMock과 같은 유닛 테스트 프레임워크에서 사용됩니다.햄크레스트는 2012년부터 [2]JUnit 4에 포함됐지만 2017년 [3]JUnit 5에서 빠졌다.

Hamcrest는 C++, C#,[4] Objective-C, [5]Python, ActionScript [6]3, PHP,[7] JavaScript,[8] Erlang,[9] R,[10] Rust [11][12] Swift로 이식되었습니다.

근거

"1세대" 단위 테스트 프레임워크는 테스트 중에 특정 조건이 참이어야 한다는 주장을 할 수 있는 '주장' 스테이트먼트를 제공한다.조건이 false일 경우 테스트는 실패합니다.예를 들어 다음과 같습니다.

주장하다(x == y); 

그러나 많은 언어에서 이 구문은 'x'와 'y'가 같지 않으면 충분히 좋은 오류 메시지를 생성하지 못합니다.에러 메세지에 「x」와 「y」의 값이 표시되어 있으면 좋을 것입니다.이 문제를 해결하기 위해 "2세대" 장치 테스트 프레임워크는 어설션 문 패밀리를 제공하여 더 나은 오류 메시지를 생성합니다.예를들면,

assert_displicate(x, y); assert_not_displicate(x, y); 

그러나 이는 단순한 평등과는 다른 비교를 지원하기 위해 위의 집합이 확장됨에 따라 어설션 매크로의 수가 폭발적으로 증가하게 됩니다.따라서 "3세대" 단위 테스트 프레임워크는 Hamcrest와 같은 라이브러리를 사용하여 "matcher" 개체와 결합할 수 있는 "assert_that" 연산자를 지원하므로 다음과 같은 구문이 발생합니다.

단언하다(x, 같다(y)) 단언하다(x, 없다(같다(y))) 

장점은 어설션이 실패해도 여전히 유창한 오류 메시지가 표시되지만 확장성이 향상된다는 것입니다.이제 matcher를 인수로 사용하는 연산을 정의하고 결과로서 반환할 수 있게 되어 소수의 원시 matcher에서 엄청난 수의 matcher 식을 생성할 수 있는 문법이 탄생하게 됩니다.

이러한 상위 매처 연산에는 논리적 연결(및 또는 비연결) 및 컬렉션에 대한 반복 연산이 포함됩니다.그 결과 컬렉션에 대한 복잡한 어소시에이션이 [citation needed]절차 스타일이 아닌 선언적인 스타일로 작성될 수 있는 풍부한 어소시에이션 언어가 됩니다.

레퍼런스

  1. ^ "The Hamcrest Tutorial".
  2. ^ Marc Philipp (21 Oct 2012). "Summary of Changes in version 4.4". JUnit documentation. Retrieved 20 Sep 2016.
  3. ^ "JUnit 5 User Guide - Third-party Assertion Libraries". Retrieved 11 May 2018.
  4. ^ "NHamcrest". GitHub. 29 July 2021.
  5. ^ "PyHamcrest".
  6. ^ "Hamcrest-AS3". GitHub. 4 July 2020.
  7. ^ "Hamcrest - Google Code".
  8. ^ "Hamcrest4Qunit". GitHub. 22 September 2021.
  9. ^ "Hamcrest Erlang". GitHub. 22 February 2022.
  10. ^ "Hamcrest for Renjin".
  11. ^ "Hamcrest Cargo package".
  12. ^ "Hamcrest for Swift". GitHub. 23 February 2022.

외부 링크