J'essaie de tester une classe avec RSpec2, qui a des méthodes privées, qui sont appelées à partir de certaines méthodes publiques. Je teste les méthodes publiques avec
@foo.should_receive(:start_training).exactly(2).times
s'ils sont appelés et à quelle fréquence. Mon problème est que cette approche ne fonctionne pas avec des méthodes privées. Alors, existe-t-il un moyen d'utiliser sth comme @foo.send(:private_method)
en combinaison avec should_receive
? Ou toute autre syntaxe?
should_receive (: method) fonctionne que: la méthode soit publique ou privée ...
Vous pouvez utiliser la méthode allow_any_instance_of
Pour bloquer ou simuler n'importe quelle instance d'une classe, par exemple vous avez un class
nommé Foo
avec quelques méthodes private
que vous pouvez faire quelque chose comme ça
allow_any_instance_of(Foo).to receive(:private_method) do
#do something
end
Si vous avez également module
, vous pouvez faire quelque chose comme ça
allow_any_instance_of(Module::Foo).to receive(:private_method) do
#do something
end
Vous pouvez trouver plus de détails sur la méthode allow_any_instance_of()
sur Documentation officielle
Pourquoi voulez-vous tester les méthodes privées? Ils sont privés pour une raison; pour empêcher l'accès aux appels externes. Tester les méthodes publiques qui reposent sur les méthodes privées devrait être suffisant.