From: Nat P. <np...@us...> - 2002-11-07 13:04:24
|
Update of /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic In directory usw-pr-cvs1:/tmp/cvs-serv15265/src/core/com/mockobjects/dynamic Modified Files: Mock.java Log Message: Mock raises test failure if try to expect/setup an invalid method Index: Mock.java =================================================================== RCS file: /cvsroot/mockobjects/mockobjects-java/src/core/com/mockobjects/dynamic/Mock.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Mock.java 6 Nov 2002 15:54:35 -0000 1.11 +++ Mock.java 7 Nov 2002 13:04:21 -0000 1.12 @@ -28,6 +28,7 @@ public static final Predicate[] NO_ARGS = new Predicate[0]; + private Class[] _proxy_classes; private Object _proxy; private MethodMap methods = new MethodMap(); private boolean _strict = false; @@ -69,6 +70,7 @@ * any number of interfaces. */ public Mock( Class[] interfaces_to_mock ) { + _proxy_classes = (Class[])interfaces_to_mock.clone(); _proxy = createInterface( interfaces_to_mock ); setupDefaultResult( byte.class, new Byte((byte)0) ); @@ -111,7 +113,8 @@ * The call to be mocked. */ public void setup( String method_name, MockCall call ) { - methods.setupCall(method_name, call); + checkMethodName( method_name ); + methods.setupCall( method_name, call ); } /** Set up calls to <var>method</var> to return <var>result</var>, @@ -163,7 +166,8 @@ * An object describing the expected call and mocking its behaviour. */ public void expect( String method_name, MockCall call ) { - methods.expectCall(method_name, call); + checkMethodName( method_name ); + methods.expectCall( method_name, call ); } /** Expect a method call and return a result when it is called. @@ -383,5 +387,26 @@ return Proxy.newProxyInstance( getClass().getClassLoader(), interface_classes, this ); + } + + private void checkMethodName( String method_name ) { + for( int i = 0; i < _proxy_classes.length; i++ ) { + if( hasMethod( _proxy_classes[i], method_name ) ) { + return; + } + } + + fail("method " + method_name + + " is not defined by any of the mocked interfaces" ); + } + + private boolean hasMethod( Class c, String method_name ) { + Method[] methods = c.getMethods(); + for( int i = 0; i < methods.length; i++ ) { + if( methods[i].getName().equals(method_name) ) { + return true; + } + } + return false; } } |