You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -18,7 +18,7 @@ Obiekt zastępnika oznaczony adnotacją `@Mock` lub `@Spy` może zostać inicjal
18
18
{% highlight kotlin %}
19
19
//use Mockito runner
20
20
@RunWith(MockitoJUnitRunner::class)
21
-
class InitMockTest {
21
+
class InitMockRunnerTest {
22
22
23
23
@Mock
24
24
var obj: Data? = null
@@ -30,7 +30,7 @@ class InitMockTest {
30
30
}
31
31
32
32
//or use Mockito rule
33
-
class InitMockTest {
33
+
class InitMockRuleTest {
34
34
35
35
@Mock
36
36
var obj: Data? = null
@@ -45,7 +45,7 @@ class InitMockTest {
45
45
}
46
46
47
47
//or use manual init method
48
-
class InitMockTest {
48
+
class InitMockAnnotationTest {
49
49
50
50
@Mock
51
51
var obj: Data? = null
@@ -58,7 +58,7 @@ class InitMockTest {
58
58
}
59
59
60
60
//or use static mock method
61
-
class InitMockTest {
61
+
class InitMockMethodTest {
62
62
63
63
@Test
64
64
fun checkIsObjectInitialized() {
@@ -98,7 +98,7 @@ class InjectMockTest {
98
98
{% endhighlight %}
99
99
100
100
## Mock i Spy
101
-
Mockito wprowadza podział zastępników na zwyczajne (`Mock`) oraz częściowe (`Spy`). `Mock`imituje wykonanie metod klasy bez wpływu na instancję atrapy. `Spy`wywołuje realną implementację instancji klasy dla wszystkich zachowań dla których nie została zdefiniowana naiwna implementacja zachowując przy tym właściwości atrapy (weryfikacja i imitacja).
101
+
Mockito wprowadza podział zastępników na zwyczajne (`Mock`) oraz częściowe (`Spy`). `Mock`nie tworzy faktycznej instancji lecz obiekt klasy szkieletowej co pozwala w całości na imitacje wykonania metod klasy bez wpływu na strukturę atrapy. `Spy`tworzy realną instancje klasy przez co wywołuje faktyczną implementację obiektu dla wszystkich zachowań dla których nie została zdefiniowana naiwna implementacja zachowując przy tym właściwości atrapy (weryfikacja i imitacja).
102
102
103
103
{% highlight kotlin %}
104
104
@RunWith(MockitoJUnitRunner::class)
@@ -132,9 +132,16 @@ class ConfigurationTest {
132
132
@Mock
133
133
lateinit var mock: Data
134
134
135
-
@InjectMocks
135
+
@Spy
136
+
lateinit var spy: Data
137
+
136
138
lateinit var manager: Manager
137
139
140
+
@Before
141
+
fun init() {
142
+
manager = Manager(mock)
143
+
}
144
+
138
145
@Test
139
146
fun checkFetchDataReturnsMockValue() {
140
147
assertNull(manager.fetchData())
@@ -155,18 +162,19 @@ class ConfigurationTest {
155
162
156
163
@Test
157
164
fun checkFetchDataTakesMultipleArgReturnsMockValue() {
158
-
assertNull(manager.fetchData())
159
-
doReturn("spy with arg").`when`(mock).getInfo("arg1")
160
-
doReturn("spy with arg").`when`(mock).getInfo("arg2")
165
+
manager = Manager(spy)
166
+
doReturn("spy with arg").`when`(spy).getInfo("arg1")
167
+
doReturn("spy with arg").`when`(spy).getInfo("arg2")
161
168
assertEquals("spy with arg", manager.fetchDataWithMessage("arg1"))
162
169
assertEquals("spy with arg", manager.fetchDataWithMessage("arg2"))
163
170
//not possible without reset using when.thenReturn
164
171
}
165
172
166
173
@Test
167
174
fun checkGetInfoForWrappedReturnsWrapperValue() {
168
-
var data = Data()
169
-
var spyData = spy(data)
175
+
val data = Data()
176
+
val spyData = Mockito.spy(data)
177
+
manager = Manager(spyData)
170
178
doReturn("wrapper").`when`(spyData).getInfo()
171
179
assertEquals("wrapper", manager.fetchData())
172
180
}
@@ -188,4 +196,53 @@ class ConfigurationTest {
188
196
}
189
197
{% endhighlight %}
190
198
191
-
## Weryfikacja
199
+
Dla bardziej złożonych zapytań dla których oczekiwany rezultat nie jest jawny lub zależnych od argumentów można wykorzystać instrukcję `thenAnswer` lub `doAnswer`.
200
+
201
+
{% highlight kotlin %}
202
+
@RunWith(MockitoJUnitRunner::class)
203
+
class AnswerTest {
204
+
205
+
@Test
206
+
fun checkFetchDataWithObjectChangedAndReturnsItsValue() {
Mockito przechowuje informacje na temat wszystkich wywołań metod wraz z użytymi argumentami. Dzięki temu pozwala na śledzenie działalności atrap oraz weryfikację ich wywołań za pomocą funkcji `verify()`.
227
+
228
+
{% highlight kotlin %}
229
+
@RunWith(MockitoJUnitRunner::class)
230
+
class VerifyTest {
231
+
232
+
@Test
233
+
fun checkHowManyTimesGetInfoCalled() {
234
+
val mock = mock(Data::class.java)
235
+
val manager = Manager(mock)
236
+
237
+
verifyZeroInteractions(mock) //any methods called on the mock
238
+
verify(mock, never()).getInfo()
239
+
240
+
manager.fetchData()
241
+
242
+
verify(mock, times(1)).getInfo()
243
+
verify(mock, atLeast(1)).getInfo()
244
+
verify(mock, atMost(3)).getInfo()
245
+
verifyNoMoreInteractions(mock) //no others method called
0 commit comments