2016-05-12 2 views
4

this question Хотя уже был дан ответ, до сих пор я не ясно, какой из них следует использовать во время издеваясьразница между Спок Mock() против Шпиона() против Ста()

Ссылаясь на spock.lang.MockingApi.java. Я не мог понять, какая разница.

Документация Mock говорит

Person person = Mock() // type is Person.class, name is "person" 

Документация Spy говорит

Person person = Spy() // type is Person.class, name is "person" 

Документация Stub говорит

Person person = Stub() // type is Person.class, name is "person" 

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

Было бы очень полезно, если это ответ с образцом кода.

+0

http://stackoverflow.com/questions/24413184/can-someone-explain-the-difference-between-mock-stub-and-spy-in-spock-framewor?lq=1 –

+0

@J. Объяснение теории Доу недостаточно для этого вопроса –

+1

[Mock] (https://spockframework.github.io/spock/docs/1.0/interaction_based_testing.html#_mocking), [Stub] (https: //spockframework.github. io/spock/docs/1.0/interactive_based_testing.html # _stubbing), [Шпион] (https://spockframework.github.io/spock/docs/1.0/interaction_based_testing.html#Spies). – jaco0646

ответ

1

из https://github.com/spockframework/spock/blob/master/docs/interaction_based_testing.adoc

гася является акт принятия коллаборационисты реагировать на вызовы метода в определенным образом. При обрыве метода вам все равно, будет ли и сколько раз вызов метода; вы просто хотите, чтобы оно возвращало какое-то значение или выполняло какой-то побочный эффект при каждом вызове.

Шпион всегда основан на реальном объекте. Следовательно, вы должны указать тип класса , а не тип интерфейса, а также любые аргументы конструктора для типа. Метод вызова шпиона автоматически делегируется реальному объекту. Аналогично, значения, возвращаемые из методов реального объекта, передаются обратно вызывающему абоненту через шпиона.

Смежные вопросы