MockTest

基本のモック

require 'test/unit'
require 'mock'

class PublisherText < Test::Unit::TestCase
  def test_message
    # set up
    expect_message = "hello"
    mock_subscriber = Mock.new
    publisher = Publisher.new
    publisher.add(mock_subscriber)
    # expectations
    mock_subscriber.__next(:recevie){
      |message| assert_equal(expect_message, message)
    }
    # execute
    publisher.publish(expect_message) 
    mock_subscriber.__verify
  end
end

class Publisher
  def add(subscriver)
    @subscriver = subscriver
  end
  def publish(message)
    @subscriver.recevie(message)
  end
end

例外を投げるモック

require 'test/unit'
require 'mock'

class AddUserActionText < Test::Unit::TestCase
  def test_system_error
    # set up
    mock_dao = Mock.new
    action = AddUserAction.new
    action.user = "haru01"
    action.dao = mock_dao
    # expectations
    mock_dao.__next(:add){
      |user| raise Errno::ENOENT, "not found text"
    }
    # execute
    begin
      action.execute
    rescue => error
      assert_equal("can't add user becouse dao error", error.message)
    end
    mock_dao.__verify
  end
end

class AddUserAction
  attr_accessor :user
  attr_accessor :dao
  def execute
    begin 
      dao.add(user)
    rescue
      raise "can't add user becouse dao error"
    end
  end
end