347 votes

Quelle est la meilleure maquette cadre pour Java?

Quel est le meilleur cadre pour créer des objets fantaisie en Java? Pourquoi? Quels sont les avantages et les inconvénients de chaque cadre?

315voto

Brian Laframboise Points 3680

J'ai eu un bon succès à l'aide de Mockito.

Quand j'ai essayé d'apprentissage sur JMock et EasyMock, j'ai trouvé la courbe d'apprentissage un peu raide (mais peut-être que c'est juste moi).

J'aime Mockito en raison de son simple et propre syntaxe que j'ai pu saisir rapidement, très rapidement. La syntaxe minimale est conçu pour les cas très bien, mais le peu de fois où j'avais besoin de faire quelque chose de plus compliqué, j'ai trouvé ce que je voulais, c'était pris en charge et facile à saisir.

Voici une (version abrégée) exemple de la Mockito page d'accueil:

import static org.mockito.Mockito.*;

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

Il ne va pas beaucoup plus simple que cela.

Le seul inconvénient majeur est, je pense, de ne pas se moquer des méthodes statiques.

84voto

Jan Kronquist Points 1527

Je suis le créateur de PowerMock alors, évidemment, je recommande! :-)

PowerMock s'étend à la fois EasyMock et Mockito avec la capacité à se moquer de méthodes statiques, finale et même des méthodes privées. Le EasyMock support est complet, mais le Mockito plugin doit travailler un peu plus. Nous prévoyons d'ajouter des JMock soutien.

PowerMock n'est pas destiné à se substituer à d'autres cadres, plutôt, il peut être utilisé dans les situations délicates lorsque d'autres cadres ne permettent pas de moqueries. PowerMock contient également d'autres fonctionnalités utiles telles que la suppression des initialiseurs statiques et les constructeurs.

46voto

Rogério Points 5460

Le JMockit projet site contient beaucoup d'informations comparatives pour le courant se moquant de boîtes à outils.

En particulier, vérifier la fonctionnalité de comparaison de la matrice, qui couvre EasyMock/EasyMock CE, jMock, Mockito, Unitils Maquette, PowerMock, et bien sûr JMockit. J'ai essayer de le garder, exacte et à jour, autant que possible.

21voto

Kris Pruden Points 1284

J'ai eu du succès avec jmockit (voir https://java.net/projects/jmockit/)

C'est assez nouveau, et donc c'est un peu brut et sous-documenté. Il utilise asm (http://asm.objectweb.org/index.html) de façon dynamique redéfinir le bytecode de la classe, de sorte qu'il peut se moquer de toutes les méthodes, y compris de la statique, des privés, des constructeurs et des initialiseurs statiques. Par exemple:

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...
}

Il a des Attentes de l'interface permettant d'enregistrement/de lecture des scénarios ainsi:

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";
      }
    }
  }
}

L'inconvénient est qu'il nécessite java 5/6.

15voto

p3t0r Points 1418

Vous pourriez aussi avoir un coup d'oeil à l'essai en utilisant Groovy. En Groovy, vous pouvez facilement se moquer d'interfaces Java à l'aide de l'opérateur:

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

En dehors de cette fonctionnalité de base Groovy offre beaucoup plus sur les moqueries à l'avant, y compris le puissant MockFor et StubFor les classes.

http://docs.codehaus.org/display/GROOVY/Groovy+se moque de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X