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.HashMapfunctional_tests do
test "that a new HashMap can be created based on another map" do
map = Map.newmap.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.HashMapfunctional_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