빠른 참조

Minitest 치트시트

Ruby Minitest 빠른 참조 가이드: 단위 테스팅, BDD 스펙, 단언문(assertions), Minitest::Mock 및 리포터 설정.

· 게시일

Minitest는 Ruby를 위한 TDD, BDD, 모킹 및 벤치마킹을 지원하는 완전한 테스팅 도구 모음입니다.

단위 테스트 (Minitest::Test)

require 'minitest/autorun'

class TestUser < Minitest::Test
  def setup
    @user = User.new(name: "Alice", email: "[email protected]")
  end

  def teardown
    @user = nil
  end

  def test_name_attribute
    assert_equal "Alice", @user.name
  end

  def test_active_status
    refute @user.banned?
  end
end

BDD 스펙 (describe / it)

require 'minitest/autorun'

describe User do
  before do
    @user = User.new("Bob")
  end

  let(:account) { Account.new(balance: 100) }

  it "must return valid formatted name" do
    _(@user.name).must_equal "Bob"
  end

  it "must maintain sufficient balance" do
    _(account.balance).must_be :>=, 50
  end
end

단언문과 기댓값 (Assertions & Expectations)

단언 (assert) 부정 단언 (refute) Spec 기댓값 (_())
assert test refute test _(test).must_equal true
assert_equal a, b refute_equal a, b _(b).must_equal a
assert_nil x refute_nil x _(x).must_be_nil
assert_empty list refute_empty list _(list).must_be_empty
assert_includes list, item refute_includes list, item _(list).must_include item
assert_match /re/, str refute_match /re/, str _(str).must_match /re/
assert_instance_of Cls, obj refute_instance_of _(obj).must_be_instance_of Cls
assert_kind_of Mod, obj refute_kind_of _(obj).must_be_kind_of Mod
assert_raises(Err) { ... } — _{ ... }.must_raise Err
assert_silent { ... } — _{ ... }.must_be_silent

Minitest::Mock을 사용한 모킹

require 'minitest/autorun'

describe PaymentGateway do
  it "charges the credit card through processor" do
    processor = Minitest::Mock.new
    # expect(method, return_value, expected_arguments)
    processor.expect :charge, true, [100.0, "tok_visa"]

    gateway = PaymentGateway.new(processor)
    gateway.process_payment(100.0, "tok_visa")

    assert processor.verify
  end
end

커스텀 리포터

gem 'minitest-reporters'

require 'minitest/reporters'
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new

참고 자료

관련 주제