Проверка в макете нужна в минитест - PullRequest
0 голосов
/ 07 января 2019

Я читаю насмешливую способность Минитеста.

require "minitest/autorun"

mock = MiniTest::Mock.new
mock.expect(:use_any_string, true, [String])
mock.use_any_string("foo")
## mock.use_any_string(1)
## MockExpectationError: mocked method :use_any_string called with unexpected arguments [1]


## I do not understand the purpose for this 
mock.verify

Так что я не понимаю цели использования mock.verify, так как попытка передать любой другой тип (use_any_string), кроме String, приводит к ложной ошибке ожидания.

Так зачем тогда использовать assert mock.verify? 1009 *

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы правы, mock.expect(:use_any_string, true, [String]) приведет к сбою теста, если ожидаемый вызов не будет сделан на макете.

Однако использование mock.verify зависит от того, как вы составите свой тест. В вашем примере вы явно вызываете метод, который вы тестируете с mock.use_any_string("foo"), поэтому нет необходимости также вызывать mock.verify.

Вы можете попасть в сценарий, в котором вы не делаете этот вызов явно, или ожидаете, что у издевательства были сделаны вызовы в определенное время. В этих сценариях используются вызовы mock.verify.

(Еще одно замечание: minitest недавно представил assert_mock, который можно использовать вместо mock.verify)

0 голосов
/ 22 января 2019

Вы правы, вы не можете установить что-либо еще для сконфигурированного макета, но если ваш макет вообще не вызывается, то вы можете узнать с помощью mock.verify. Поэтому, если ваш тестируемый метод должен вызывать фиктивный метод, вам следует убедиться, что он был вызван вообще.

...