Skip to content

Commit 59ad72e

Browse files
authored
powermock added
1 parent 7143da6 commit 59ad72e

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

_drafts/2019-01-21-mockito.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,46 @@ class VerifyTest {
246246
}
247247
}
248248
{% endhighlight %}
249+
250+
## PowerMock
251+
Tworzenie imitacji w `Mockito` jest obarczone pewnymi ograniczeniami. Niemożliwym jest tworzenie naiwnej implementacji dla statycznych i prywatnych metod klasy czy wywołań konstruktora. Aby temu zaradzić można wykorzystać bibliotekę `PowerMock`, której zależności pakietów mogą zawierać implementacje `JUnit` oraz `Mockito` dzięki czemu zachowana jest zgodność wersji. Klasa testowa korzystająca z PowerMock powinna być uruchamiana z instrukcją `@RunWith(PowerMockRunner.class)` wraz z adnotacją dla klasy testowanej `@PrepareForTest(ClassName.class)`. PowerMock uzupełnia implementacje Mockito o dodatkowe metody realizacji atrap dla metod statycznych, prywatnych i konstruktorów takie jak np.: `mockStatic`, `verifyPrivate`, `whenNew`.
252+
253+
{% highlight kotlin %}
254+
@RunWith(PowerMockRunner::class)
255+
@PrepareForTest(Data::class, System::class)
256+
class PowerMockTest {
257+
258+
@Test
259+
fun checkMockStaticMethod() {
260+
PowerMockito.mockStatic(System::class.java)
261+
PowerMockito`when`(System.currentTimeMillis()).thenReturn(100)
262+
assertEquals(100, System.currentTimeMillis())
263+
}
264+
265+
@Test
266+
fun checkMockPrivateMethod() {
267+
val obj = Data()
268+
val spy: Data = PowerMockito.spy(obj)
269+
assertEquals("private returned from public", spy.publicMethod())
270+
PowerMockito.doReturn("private mocked").`when`(spy, "privateMethod")
271+
assertEquals("private mocked", spy.publicMethod())
272+
PowerMockito.verifyPrivate(spy, times(2)).invoke("privateMethod")
273+
}
274+
275+
@Test
276+
fun checkMockConstructor() {
277+
val obj = Data()
278+
assertEquals(0, obj.number)
279+
assertEquals("", obj.text)
280+
obj.number = 1
281+
obj.text = "text"
282+
283+
PowerMockito.whenNew(Data::class.java).withNoArguments().thenReturn(obj)
284+
val newObj = Data()
285+
assertEquals(1, newObj.number)
286+
assertEquals("text", newObj.text)
287+
}
288+
}
289+
{% endhighlight %}
290+
291+
Jako alternatywę dla Mockito i PowerMock w `Kotlin` warto rozważyć bibliotekę `Mockk`, która rozwiązuje problemy występujące w Mockito i wspiera natywne cechy Kotlin takie jak np.: rozszerzenia.

0 commit comments

Comments
 (0)