Mocking in Java using Mocha

Ola Bini one of the JRuby guys has released the JtestR tool which allows you to write tests for Java code in Ruby! Ola has bundled a number of Ruby libraries – Mocha, RSpec, Dust, Test::Unit & ActiveSupport – together with JRuby to allow you to write Ruby test cases that test Java code.

He has a couple of examples in the Mock documentation of how to use Mocha

The first one demonstrates using Mocha to mock an interface (Map).

import java.util.Map
import java.util.Iterator
import java.util.Set
import java.util.HashMap

functional_tests do
  test "that a new HashMap can be created based on another map" do
    map = Map.new

    map.expects(:size).returns(0)

    iter = Iterator.new
    iter.expects(:hasNext).returns(false)

    set = Set.new
    set.expects(:iterator).returns(iter)

    map.expects(:entrySet).returns(set)

    assert_equals 0, HashMap.new(map).size
  end
end

The second example demonstrates using Mocha to setup expectations on a real (non-mock) instance (HashMap)…

import java.util.Iterator
import java.util.Set
import java.util.HashMap

functional_tests do
  test "that a new HashMap can be created based on another map" do
    map = mock(HashMap)

    map.expects(:size).returns(0)

    iter = Iterator.new
    iter.expects(:hasNext).returns(false)

    set = Set.new
    set.expects(:iterator).returns(iter)

    map.expects(:entrySet).returns(set)

    assert_equals 0, HashMap.new(map).size
  end
end