Pregunta

Tengo gran clase que necesito para construir código auxiliar para.

Para darle Fotografía Es Mensajes de clase de la GWT. A menudo esto es clase con docenas de métodos que devuelven cadena.

Con JMock que pueda hacer tropezar, pero voy a terminar con lo que cada método ... Esto no es algo que me gustaría ver.

¿Hay algo que va a crear automáticamente los talones para cada método? Necesito estos métodos para devolver algo predefinido, como cadena vacía, pero voy a ser feliz con cualquier sugerencia.

¿Fue útil?

Solución

En JMock puede permitir que los métodos que le interesan con resultados explícitos y luego permitir que cualquier otro método de los mensajes objeto con una declaración que permite que no incluye un método. Por ejemplo:.

allowing(m).getBlah("something");
    will(returnValue("foo"));
allowing(m); // matches anything else, will return some default value if called 

Pero ...

Si se acaba de tropezar un montón de métodos getter, un marco de objeto de burla es la herramienta equivocada para su uso. objetos simulados se utilizan para probar que el objeto bajo prueba envía los comandos correctos a los objetos vecino para efectuar un cambio en su entorno.

A menudo es más fácil crear una clase stub si la interfaz que sólo contiene captadores. O puede utilizar usurpador para generar recibos de forma automática.

Otros consejos

Para una interfaz que puede utilizar la funcionalidad de java.lang.reflect.Proxy. Suponiendo que desea código auxiliar respuestas para la clase MessageConstants, el código será similar a:

        InvocationHandler handler = new InvocationHandler() {

        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

            if (String.class.equals(method.getReturnType()))
                return "proxy generated method return";

            throw new AbstractMethodError("Not implemented");
        }
    };
    Class<?> proxyClass = Proxy.getProxyClass(MessageConstants.class.getClassLoader(), new Class[] { MessageConstants.class });
    MessageConstants messageConstants = (MessageConstants) proxyClass.getConstructor(new Class[] {InvocationHandler.class}).newInstance(new Object[] { handler });

    System.out.println(messageConstants.description());

    messageConstants.getBoolean("someBoolean");

y dará lugar a

proxy generated method return
Exception in thread "main" java.lang.Error: Not implemented
at xxx.Application$1.invoke(Application.java:48)
at $Proxy0.getBoolean(Unknown Source)
at xxx.Application.main(Application.java:64)

El InvocationHandler impulsa el tropezar, mientras que el resto es sólo fontanería.

Me alegra ver que has encontrado una respuesta. Sólo para mayor información, jMock permite especificaciones bastante flexibles de cómo se corresponden con métodos, consulte http : //www.jmock.org/match-object-or-method.html . Por ejemplo, se puede hacer este tipo de cosas:

allowing (any(Object.class)).method("get.*").withNoArguments();

para adaptarse a cualquier comprador.

S

Si utiliza EasyMock , sólo tiene que especificar el comportamiento / expectativas / talones de los métodos que realmente esperas ser llamado y utilizado.

Después de usar tanto JMock y EasyMock, tengo que decir que la API de EasyMock es aproximadamente 10 veces más fácil de usar, y ya que es en su mayoría de tipo estático de la interfaz, es refactorización salvo, así (que está utilizando cuerdas de nombres de métodos, etc. ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top