Насмешливая сортировка с мокко - PullRequest
1 голос
/ 07 апреля 2010

Как можно смоделировать сортировку массива, ожидая лямбда-выражения?

Это тривиальный пример моей проблемы:

# 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) }

Теперь, сначала я ожидал, что это сработает; однако я получил следующую ошибку:

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

Я понимаю, что это не сработает, потому что l не передается в качестве параметра l. Однако, есть ли другой способ сделать то, что пытается сделать этот код?

ПРИМЕЧАНИЕ: я выяснил, как решить мою проблему, не понимая, как это сделать. Я оставлю это открытым на тот случай, если у кого-то еще возникнет подобная проблема.

Cheers, Джозеф

1 Ответ

1 голос
/ 02 декабря 2010

Методы насмешки с блоками могут быть довольно запутанными. Один из ключей - понять, какое поведение вы хотите протестировать. Я не могу сказать из вашего примера кода, что именно вы хотите проверить. Тем не менее, вы можете найти документацию для Mocha :: Expectation # yields (или даже Mocha :: Expectation # multiple_yields ) полезной.

...