Minitest 6.0.0 출시: 주요 변경 사항 및 새로운 기능

minitest version 6.0.0 has been released!

작성자
발행일
2025년 12월 17일

핵심 요약

  • 1 Minitest 6.0.0은 대규모 리팩토링과 주요 호환성 제거를 포함하며, 기존 네임스페이스 및 Marshal 사용을 삭제하고 실행 경로를 재정비했습니다.
  • 2 테스트 작성의 명확성을 높이기 위해 `minitest/mock.rb`가 별도 gem으로 분리되고, 특정 `assert` 메서드의 사용법이 변경되었으며, 플러그인 로딩이 옵트인 방식으로 전환되었습니다.
  • 3 새로운 `minitest-sprint`, `minitest-bisect`, `minitest-server` 등 다양한 도구들이 추가되어 개발자의 테스트 경험과 효율성을 향상시켰습니다.

도입

Minitest는 TDD, BDD 및 벤치마킹을 지원하는 Ruby용 포괄적인 테스트 스위트입니다. Ruby의 기존 기능을 활용하여 DSL(도메인 특화 언어) 대신 Ruby 자체의 강점을 사용하는 철학을 가지고 있어 높은 가독성과 유지보수성을 자랑합니다. 2025년 12월 17일, Minitest 6.0.0이 출시되었으며, 이는 기존 사용자들에게 상당한 변화를 요구하는 주요 릴리스입니다. 이번 버전은 아키텍처 개선과 테스트 경험 확장에 중점을 두었습니다.

Minitest 6.0.0 주요 변경 사항

Minitest 6.0.0은 대규모 리팩토링과 여러 파괴적 변경 사항을 포함하고 있어, 업그레이드 시 주의 깊은 검토가 필요합니다. 다음은 핵심적인 변경 내용입니다.

제거된 기능 (8가지)

  • 호환성 네임스페이스 삭제: MiniTestMiniTest::Unit::TestCase 호환성 네임스페이스가 제거되었습니다.

  • Marshal 사용 제거: 직렬화를 위한 Marshal 사용이 모두 삭제되었습니다.

  • 환경 가드 메서드 삭제: maglev?rubinius? 가드 메서드가 삭제되었습니다.

  • Objectminitest/spec 기대치 제거: Object에서 모든 minitest/spec 기대치가 삭제되었으며, 이제 _/value/expect를 사용해야 합니다.

  • minitest/mock.rb 분리: minitest/mock.rbminitest-mock gem으로 추출되었습니다.

  • assert_equal(nil, value) 제한: assert_equal(nil, value)는 더 이상 허용되지 않으며, 명시적으로 assert_nil을 사용해야 합니다.

  • assert_send 제거: assert_send가 제거되었으며, assert_predicate 또는 assert_operator를 사용해야 합니다.

  • **`Minitest::Test

class_name 제거**: Minitest::Test

class_name` 메서드가 제거되었습니다.

주요 (호환성 파괴) 변경 사항 (7가지)

  • 실행 경로 대규모 리팩토링: Minitest의 실행 경로가 대폭 변경되었습니다.
    • Minitest.__run -> Minitest.run_all_suites
    • Runnable.run -> Runnable.run_suite & Runnable.filter_runnable_methods
    • Runnable.run_one_method -> Runnable.run
    • Minitest.run_one_method가 제거되었습니다.
  • 병렬 테스트 환경 변수 변경: 병렬 테스트 수 지정을 위한 ENV["N"] 사용이 제거되었으며, MT_CPU를 사용해야 합니다.

  • 필터 옵션 이름 변경: options[:filter]options[:include]로 변경되었고, --include 명령줄 옵션이 추가되었습니다. (--name은 향후 제거될 예정입니다.)

  • test_order 메서드 이름 변경: `Minitest::Runnable

test_order#run_order`로 변경되었습니다.

  • #message 동작 변경: #message에 proc이 전달될 경우, 해당 proc이 다른 모든 출력을 재정의하며 더 이상 체인되지 않습니다.

  • with_info_handler 인자 제거: with_info_handler에서 reporter 인자가 제거되었습니다.

  • 플러그인 로딩 옵트인: 플러그인 로딩이 이제 옵트인 방식으로 변경되었습니다. test_helper에서 플러그인을 require하거나, Minitest.load :x를 사용하거나, 이전 자동 로딩 동작을 위해 Minitest.load_plugins를 호출해야 합니다.

추가된 기능 (5가지)

  • minitest-sprint 통합: minitest-sprintminitest 명령줄 기능이 라인 지원과 함께 추가되었습니다.

  • minitest-bisect 추가: minitest --bisect 또는 -b로 실행할 수 있는 minitest-bisect가 추가되었습니다.

  • minitest-server 추가: minitest-server가 추가되었습니다.

  • minitest/complete 추가: 쉘의 탭 완성(tab-completion)을 돕는 minitest/complete가 추가되었습니다.

  • path_expander 최신 버전 벤더링: path_expander의 최신 버전이 포함되었습니다.

기타 변경 사항 (5가지)

  • Ruby 버전 상향: Ruby 3.2+ 이상으로 버전이 상향되었습니다.

  • 오래된 조건문 제거: `CompositeReporter

prerecord 및 리포터 내 Minitest::Result` 주변의 오래된 버전 가드가 제거되었습니다.

  • assert_operatorassert_predicate 개선: 두 메서드 모두 이제 assert_respond_to를 먼저 호출합니다.

  • 어설션 재사용 증가: 어설션들이 더 많이 재사용되어 일부 경우 어설션 카운트가 증가할 수 있습니다.

결론

Minitest 6.0.0은 Ruby 테스트 프레임워크의 중요한 이정표이며, 대규모 아키텍처 개선과 함께 더욱 명확하고 효율적인 테스트 작성을 위한 변화를 도입했습니다. 기존 호환성 제거 및 실행 경로 리팩토링은 업그레이드 시 상당한 노력을 요구할 수 있으나, `minitest-mock`의 분리, 새로운 `assert` 사용법, 플러그인 로딩 방식 변경 등은 장기적으로 더 견고하고 유지보수하기 쉬운 테스트 환경을 제공할 것입니다. `minitest-bisect`와 같은 새로운 도구들은 개발자의 생산성을 높이는 데 기여할 것으로 예상됩니다. 사용자들은 GitHub 이슈 트래커를 통해 피드백을 제공하여 Minitest의 지속적인 발전에 참여할 수 있습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!