347 votos

¿Cuál es el mejor simulacro de marco de trabajo para Java?

¿Cuál es el mejor marco para la creación de simulacros de objetos en Java? ¿Por qué? ¿Cuáles son los pros y los contras de cada marco?

315voto

Brian Laframboise Puntos 3680

He tenido buen éxito con Mockito.

Cuando traté de aprender acerca de JMock y EasyMock, me encontré con la curva de aprendizaje para ser un poco caro (aunque tal vez eso es sólo conmigo).

Me gusta Mockito, debido a su sencillo y limpio de la sintaxis de que yo era capaz de captar muy rápidamente. A la mínima que la sintaxis está diseñado para apoyar el común de los casos muy bien, aunque las pocas veces que yo necesitaba hacer algo más complicado que he encontrado lo que yo quería era compatible y fácil de entender.

He aquí un (abreviada) ejemplo de la Mockito página de inicio:

import static org.mockito.Mockito.*;

List mockedList = mock(List.class);
mockedList.clear();
verify(mockedList).clear();

No se puede pedir mucho más sencillo que eso.

La única gran pega que puedo pensar es que no burlarse de métodos estáticos.

84voto

Jan Kronquist Puntos 1527

Yo soy el creador de PowerMock así que, obviamente, tengo que recomendar que! :-)

PowerMock se extiende tanto a EasyMock y Mockito con la capacidad para burlarse de los métodos estáticos, final e incluso los métodos privados. El EasyMock apoyo es completo, pero el Mockito plugin necesita algo más de trabajo. Estamos planeando agregar JMock apoyo.

PowerMock no pretende sustituir a otros marcos de referencia, sino que puede ser utilizado en las situaciones más difíciles cuando otros marcos no permite que se burlaba. PowerMock también contiene otras características útiles, tales como la supresión de los inicializadores estáticos y constructores.

46voto

Rogério Puntos 5460

El JMockit sitio del proyecto contiene un montón de información comparativa para la actual burlándose de kits de herramientas.

En particular, retirar la matriz de comparación de características, que cubre EasyMock/EasyMock CE, jMock, Mockito, Unitils Simulacro, PowerMock, y por supuesto JMockit. Trato de mantener dicha información precisa y actualizada, tanto como sea posible.

21voto

Kris Pruden Puntos 1284

He tenido éxito con jmockit (ver https://java.net/projects/jmockit/)

Es bastante nuevo, así que es un poco cruda y underdocumented. Utiliza asm (http://asm.objectweb.org/index.html) dinámicamente redefinir la clase de código de bytes, por lo que puede burlarse de todos los métodos, incluyendo estática, privadas, constructores, y los inicializadores estáticos. Por ejemplo:

import mockit.Mockit;

...
Mockit.redefineMethods(MyClassWithStaticInit.class,
                       MyReplacementClass.class);
...
class MyReplacementClass {
  public void $init() {...} // replace default constructor
  public static void $clinit{...} // replace static initializer
  public static void myStatic{...} // replace static method
  // etc...
}

Tiene una de las Expectativas de interface de grabación/reproducción de escenarios así:

import mockit.Expectations;
import org.testng.annotations.Test;

public class ExpecationsTest {
  private MyClass obj;

  @Test
  public void testFoo() {
    new Expectations(true) {
      MyClass c;
      {
        obj = c;
        invokeReturning(c.getFoo("foo", false), "bas");
      }
    };

    assert "bas".equals(obj.getFoo("foo", false));

    Expectations.assertSatisfied();
  }

  public static class MyClass {
    public String getFoo(String str, boolean bool) {
      if (bool) {
        return "foo";
      } else {
        return "bar";
      }
    }
  }
}

La desventaja es que requiere de java 5/6.

15voto

p3t0r Puntos 1418

Usted podría tener también un vistazo a la prueba con Groovy. En Groovy puede fácilmente burlarse de interfaces Java utilizando el " como " operador:

def request = [isUserInRole: { roleName -> roleName == "testRole"}] as HttpServletRequest 

Aparte de esta funcionalidad básica Groovy ofrece mucho más en la burla frente, incluyendo el poderoso MockFor y StubFor clases.

http://docs.codehaus.org/display/GROOVY/Groovy+Mocks

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X