2010-04-06 6 views
1

Comment est-ce que je peux mocker le tri d'un tableau attendez-vous à une expression de lambda?Mocking Sort With Mocha

Ceci est un exemple trivial de mon problème:

# initializing the data 
l = lambda { |a,b| a <=> b } 
array = [ 1, 2, 3, 4, 5 ] 
sorted_array = [ 2, 3, 8, 9, 1] 

# I expect that sort will be called using the lambda as a parameter 
array.expects(:sort).with(l).returns(sorted_array) 

# perform the sort using the lambda expression 
temp = array.sort{|a,b| l.call(a,b) } 

Maintenant, au début, je pensais que cela fonctionnerait; cependant, j'ai l'erreur suivante:

- expected exactly once, not yet invoked: [ 1, 2, 3, 4, 5 ].sort(#<Proc:0xb665eb48>) 

Je réalise que ceci ne fonctionnera pas parce que l n'est pas passé en paramètre à l. Cependant, y a-t-il une autre façon de faire ce que ce code essaie d'accomplir?

NOTE: J'ai trouvé comment résoudre mon problème sans comprendre comment faire ce qui précède. Je vais laisser cela ouvert juste au cas où quelqu'un d'autre a un problème similaire.

Cheers, Joseph

+0

Salut Joseph, je suis bryan. Je soupçonne que le problème pourrait être causé par "with (l)". Avec la façon dont vous l'utilisez, ne devrait pas être appelé avec un «l»? – Shuo

+0

Hey Bryan, Cela a du sens. Au début, j'ai supposé que si vous fournissiez un bloc de code à .sort, il passerait l pour trier. Alors maintenant je cherche une autre façon de faire ce que le code ci-dessus essaie de faire. J'ai modifié le message pour inclure spécifiquement cette demande. – user175750

+0

Je vois, vous l'avez déjà fait remarquer dans votre question initiale. :) J'utilise une machine où le rubis n'est pas installé. Regardera ce problème plus tard. Bonne chance. – Shuo

Répondre

1

méthodes avec des blocs moqueurs peuvent être assez déroutant. L'une des clés est d'être clair sur le comportement que vous voulez tester. Je ne peux pas dire exactement à partir de votre exemple de code ce que vous voulez tester. Cependant, vous pourriez trouver la documentation pour Mocha::Expectation#yields (ou même Mocha::Expectation#multiple_yields) utile.