# Minitest — Complete Testing Suite for Ruby > Minitest provides a complete suite of testing facilities for Ruby, supporting TDD, BDD, mocking, and benchmarking in a fast, lightweight package bundled with Ruby itself. ## Install Save in your project root: # Minitest — Complete Testing Suite for Ruby ## Quick Use ```ruby # test/test_calculator.rb require "minitest/autorun" class TestCalculator < Minitest::Test def test_addition assert_equal 4, 2 + 2 end end # Run: ruby test/test_calculator.rb ``` ## Introduction Minitest is Ruby's built-in testing framework, shipping with every Ruby installation since 1.9. It provides a clean, fast alternative to larger testing libraries while supporting unit tests, specs, mocks, and benchmarks in a single package under 1,500 lines of code. ## What Minitest Does - Provides assert-style unit testing with Minitest::Test - Supports RSpec-like describe/it syntax with Minitest::Spec - Includes a built-in mock and stub system for test doubles - Offers benchmarking capabilities for performance testing - Ships with Ruby so no additional gem installation is required ## Architecture Overview Minitest is a single-gem library with modular components. The core runner discovers test classes, shuffles test order for isolation, and executes each method. Results are collected by a reporter pipeline that can output dots, verbose names, or custom formats. The spec DSL is a thin wrapper that generates Minitest::Test subclasses at load time. ## Self-Hosting & Configuration - Already included with Ruby; optionally pin a version in your Gemfile - Place test files in a test directory following the test_*.rb naming convention - Configure reporters and plugins via Minitest.extensions - Use Minitest::Spec for BDD-style syntax if preferred - Integrate with Rake by defining a Rake::TestTask in your Rakefile ## Key Features - Ships with Ruby, requiring zero setup for new projects - Extremely fast execution due to minimal overhead - Randomized test order by default to catch order dependencies - Extensible plugin system for custom reporters and assertions - Spec DSL provides familiar describe/it syntax without switching frameworks ## Comparison with Similar Tools - **RSpec** — full-featured BDD framework with extensive DSL; Minitest is leaner and faster with optional spec syntax - **Test::Unit** — older Ruby testing library; Minitest is its modern successor bundled with Ruby - **Cucumber** — acceptance testing with Gherkin syntax; Minitest focuses on unit and integration tests - **pytest** — Python testing framework; Minitest fills the same role for the Ruby ecosystem - **Jest** — JavaScript testing with snapshots; Minitest serves Ruby with similar assertion-based patterns ## FAQ **Q: Should I use Minitest or RSpec?** A: Minitest is faster and simpler with less magic. RSpec offers a richer DSL and ecosystem. Both are production-ready choices. **Q: Can I use Minitest with Rails?** A: Yes, Rails includes Minitest as its default testing framework with generators for test files. **Q: How do I add custom assertions?** A: Define methods in a module and include it in Minitest::Test. Custom assertions follow the assert_* naming convention. **Q: Does Minitest support parallel test execution?** A: Yes, use Minitest.parallel_executor to run test classes in threads, or use the parallelize method in Rails. ## Sources - https://github.com/minitest/minitest - https://docs.seattlerb.org/minitest --- Source: https://tokrepo.com/en/workflows/asset-47c109e2 Author: AI Open Source