import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.junit.Test; import org.junit.runner.RunWith; import java.util.Comparator; @RunWith(JMock.class) public class ComparatorTest { @SuppressWarnings({ "EmptyClass" }) private Mockery context = new JUnit4Mockery() {{ setImposteriser(ClassImposteriser.INSTANCE); }}; @Test public void failingTest() throws Exception { final MyComparator comparator = context.mock(MyComparator.class); final MyComparable a = new MyComparable(); final MyComparable b = new MyComparable(); context.checking(new Expectations() {{ one(comparator).compare(a, b); will(returnValue(0)); }}); compare(a, b, comparator); } @Test public void passingTest() throws Exception { final Comparator comparator = context.mock(MyComparator.class); final MyComparable a = new MyComparable(); final MyComparable b = new MyComparable(); context.checking(new Expectations() {{ one(comparator).compare(a, b); will(returnValue(0)); }}); compare(a, b, comparator); } private int compare(T a, T b, Comparator c) { return c.compare(a, b); } static class MyComparable implements Comparable { public int compareTo(Object o) { return 0; } } static class MyComparator implements Comparator { public int compare(MyComparable o1, MyComparable o2) { return 0; } } }