Question

Je remarque que beaucoup de gens préfèrent le Moka au cadre construit par RSpec. Quelqu'un peut-il expliquer les avantages de Mocha, ou de toute alternative, par rapport à RSpec intégré dans un framework moqueur?

Était-ce utile?

La solution

Une particularité que j’aime vraiment beaucoup est la possibilité de remplacer toutes les instances d’une classe. Souvent, je fais quelque chose comme ce qui suit avec les moqueurs RSpec:

stub_car = mock(Car)
stub_car.stub!(:speed).and_return(100)
Car.stub!(:new).and_return(stub_car)

avec Mocha qui devient:

Car.any_instance.stubs(:speed).returns(100)

Je trouve la version Mocha plus claire et plus explicite.

Autres conseils

Les cadres moqueurs Ruby ont beaucoup évolué depuis que cette question a été posée en 2009. Voici donc une petite comparaison en 2013:

Attentes

  • avec Rspec-mocks: expect (utilisateur) .pour recevoir (: say_hello)
  • avec Mocha: user.expects (: say_hello) .once

Stubbing d'un objet

  • avec Rspec-mocks: utilisateur = double (nom: "John Doe")
  • avec Mocha: utilisateur = souche (nom: 'John Doe')

Stubbing quoi que ce soit

  • avec Rspec-mocks: User.any_instance.stub (: name) .and_return ('John Doe')
  • avec Mocha: User.any_instance.stubs (: name) .returns ('John Doe')

Ils offrent les mêmes installations et peuvent être utilisés avec ou sans Rspec.
Donc, je dirais que choisir l’un plutôt que l’autre est une question de goût personnel (et qu’il en a un goût identique).

Autant que je sache, Mocha prend en charge Double Injections (alias Partial Mocking, également pris en charge dans rr), mais il n’est pas certain que RSpec prenne également en charge cette fonctionnalité.

De plus, pour ceux qui préfèrent passer d’un framework de test à l’autre, Mocha est une solution universelle applicable à Test / Unit, Shoulda, etc. L’utilisation de RSpec avec toutes ces bibliothèques sera une overkill.

Moi, pour un usage, moka parce que je n’utilise pas rspec. J'utilise test / unit, et test / unit n'a pas de stubbing et de raillage intégré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top