nino martinez wael wrote:
> The reason that I asked this question anyhow was because I wanted to
> use the real object but I cant grab it since Im not sure howto do that
> with jmock..
>
> For example here I expect this:
>
> one(keySetupCpr).setTerminators(with(any(List.class)));
>
> if I could grab that list things would be easier...
>
My solution to this kind of requirement is this class (which anyone
should feel free to use however they want, just make sure you give me
credit if distributing in source form):
--- file: MockProperty.java
import org.jmock.api.Action;
import org.jmock.api.Invocation;
import org.jmock.lib.action.CustomAction;
public class MockProperty<T>
{
String name;
Class<T> clazz;
T value;
protected MockProperty (String name, Class<T> clazz)
{
this.name = name;
this.clazz = clazz;
}
public void setValue (T newValue)
{
value = newValue;
}
public T getValue ()
{
return value;
}
public Action setValueFromParameter (int index)
{
return new SetterAction (index);
}
public Action returnValue ()
{
return new GetterAction ();
}
private class SetterAction extends CustomAction
{
int index;
public SetterAction (int index)
{
super ("set " + name + " to value in parameter " + index);
this.index = index;
}
@Override
public Object invoke (Invocation invocation) throws Throwable
{
value = clazz.cast (invocation.getParameter (index));
return null;
}
}
private class GetterAction extends CustomAction
{
public GetterAction ()
{
super ("return value stored in " + name);
}
@Override
public Object invoke (Invocation invocation) throws Throwable
{
return value;
}
}
public static <T> MockProperty<T> create (String name, Class<T> clazz)
{
return new MockProperty<T> (name, clazz);
}
}
---- end of file
This both serves as a test for it, and shows how to use it:
---- file: MockPropertyTest.java
import static org.junit.Assert.*;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Test;
public class MockPropertyTest
{
interface TestInterface
{
public void set (int i);
public int get ();
}
@Test
public void setAndReturnValueWorks ()
{
Mockery mockery = new Mockery ();
final MockProperty<Integer> testProperty = MockProperty.create
("testProperty", Integer.class);
final TestInterface testInterface = mockery.mock
(TestInterface.class);
mockery.checking (new Expectations () {
{
one (testInterface).set (with (any (Integer.class)));
will (testProperty.setValueFromParameter (0));
one (testInterface).get ();
will (testProperty.returnValue ());
}
});
testInterface.set (42);
assertEquals (42, (int) testProperty.getValue ());
assertEquals (42, testInterface.get ());
mockery.assertIsSatisfied ();
}
}
---- end of file
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email