Skip to content

Commit fb651cc

Browse files
committed
mockito code added
1 parent 2d44868 commit fb651cc

14 files changed

+283
-0
lines changed

junit/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# junit
2+
This is repository of http://androidcode.pl blog. It shows uses JUnit in Android. It is a part of Testing - JUnit post in the blog.

mockito/Data.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
data class Data(var number: Int, var text: String) {
2+
3+
constructor() : this(0, "")
4+
5+
fun getInfo(): String {
6+
return "$text $number"
7+
}
8+
9+
fun getInfo(message: String?): String {
10+
return "$message $number"
11+
}
12+
13+
fun publicMethod(): String {
14+
return privateMethod()
15+
}
16+
17+
private fun privateMethod(): String {
18+
return "private returned from public"
19+
}
20+
}

mockito/Manager.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Manager(val data: Data) {
2+
3+
fun fetchData(): String {
4+
return data.getInfo()
5+
}
6+
7+
fun fetchDataWithMessage(message: String): String {
8+
return data.getInfo(message)
9+
}
10+
}

mockito/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# mockito
2+
This is repository of http://androidcode.pl blog. It shows uses Mockito in Android. It is a part of Testing - Mockito post in the blog.

mockito/test/AnswerTest.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@RunWith(MockitoJUnitRunner::class)
2+
class AnswerTest {
3+
4+
@Test
5+
fun checkFetchDataWithObjectChangedAndReturnsItsValue() {
6+
val spy = spy(Data::class.java)
7+
val manager = Manager(mock)
8+
9+
assertEquals(" 0", manager.fetchData())
10+
assertEquals("message 0", manager.fetchDataWithMessage("message"))
11+
12+
doAnswer(Answer {
13+
spy.number++
14+
spy.text = it.arguments[0] as String
15+
return@Answer spy.getInfo()
16+
}).`when`(spy).getInfo(anyString())
17+
18+
assertEquals("message 1", manager.fetchDataWithMessage("message"))
19+
assertEquals("message 1", manager.fetchData())
20+
}
21+
}

mockito/test/ConfigurationTest.kt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
@RunWith(MockitoJUnitRunner::class)
2+
class ConfigurationTest {
3+
4+
@Mock
5+
lateinit var mock: Data
6+
7+
@Spy
8+
lateinit var spy: Data
9+
10+
lateinit var manager: Manager
11+
12+
@Before
13+
fun init() {
14+
manager = Manager(mock)
15+
}
16+
17+
@Test
18+
fun checkFetchDataReturnsMockValue() {
19+
assertNull(manager.fetchData())
20+
`when`(mock.getInfo()).thenReturn("mock")
21+
assertNull(manager.fetchData()) //now it fails
22+
assertEquals("mock", manager.fetchData())
23+
}
24+
25+
@Test
26+
fun checkFetchDataReturnsMultipleMockValue() {
27+
assertNull(manager.fetchData())
28+
`when`(mock.getInfo()).thenReturn("mock1", "mock2")
29+
assertNull(manager.fetchData()) //now it fails
30+
assertEquals("mock1", manager.fetchData())
31+
assertEquals("mock2", manager.fetchData())
32+
assertEquals("mock2", manager.fetchData())
33+
}
34+
35+
@Test
36+
fun checkFetchDataTakesMultipleArgReturnsMockValue() {
37+
manager = Manager(spy)
38+
doReturn("spy with arg").`when`(spy).getInfo("arg1")
39+
doReturn("spy with arg").`when`(spy).getInfo("arg2")
40+
assertEquals("spy with arg", manager.fetchDataWithMessage("arg1"))
41+
assertEquals("spy with arg", manager.fetchDataWithMessage("arg2"))
42+
//not possible without reset using when.thenReturn
43+
}
44+
45+
@Test
46+
fun checkGetInfoForWrappedReturnsWrapperValue() {
47+
val data = Data()
48+
val spyData = Mockito.spy(data)
49+
manager = Manager(spyData)
50+
doReturn("wrapper").`when`(spyData).getInfo()
51+
assertEquals("wrapper", manager.fetchData())
52+
}
53+
54+
@Test
55+
fun checkFetchDataWithArgsReturnsMockValue() {
56+
Mockito.`when`(mock.getInfo("arg")).thenReturn("mock with arg")
57+
assertEquals("mock with arg", manager.fetchDataWithMessage("arg"))
58+
assertEquals("mock with arg", manager.fetchDataWithMessage("whatever")) //fails
59+
`when`(mock.getInfo(anyString())).thenReturn("mock with arg")
60+
assertEquals("mock with arg", manager.fetchDataWithMessage("whatever")) //now it pass
61+
}
62+
63+
@Test(expected = IllegalArgumentException::class)
64+
fun checkFetchDataThrowsExceptionForSpecialCharactersArg() {
65+
`when`(mock.getInfo("@")).thenThrow(IllegalArgumentException())
66+
manager.fetchDataWithMessage("@")
67+
}
68+
}

mockito/test/InjectMockTest.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@RunWith(MockitoJUnitRunner::class)
2+
class InjectMockTest {
3+
4+
@Mock
5+
var mock: Data? = null
6+
7+
//constructor requires Data arg
8+
@InjectMocks
9+
var manager1: Manager? = null
10+
11+
@Test
12+
fun checkIsManager1Initialized() {
13+
assertNotNull(mock)
14+
assertNotNull(manager1)
15+
}
16+
17+
//equivalent
18+
@Test
19+
fun checkIsManager2Initialized() {
20+
var manager2 = Manager(mock)
21+
assertNotNull(mock)
22+
assertNotNull(manager2)
23+
}
24+
}

mockito/test/MockSpyTest.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@RunWith(MockitoJUnitRunner::class)
2+
class MockSpyTest {
3+
4+
@Mock
5+
var mock: Data? = null
6+
7+
@Spy
8+
var spy: Data? = null
9+
10+
@Test
11+
fun checkIsObjectInitialized() {
12+
assertNotNull(mock)
13+
assertNotNull(spy)
14+
mock?.text = "mock"
15+
spy?.text = "spy"
16+
assertEquals("mock", mock?.text) //fails mock.text is null
17+
assertEquals("spy", spy?.text)
18+
}
19+
}

mockito/test/PowerMockTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@RunWith(PowerMockRunner::class)
2+
@PrepareForTest(Data::class, System::class)
3+
class PowerMockTest {
4+
5+
@Test
6+
fun checkMockStaticMethod() {
7+
PowerMockito.mockStatic(System::class.java)
8+
PowerMockito`when`(System.currentTimeMillis()).thenReturn(100)
9+
assertEquals(100, System.currentTimeMillis())
10+
}
11+
12+
@Test
13+
fun checkMockPrivateMethod() {
14+
val obj = Data()
15+
val spy: Data = PowerMockito.spy(obj)
16+
assertEquals("private returned from public", spy.publicMethod())
17+
PowerMockito.doReturn("private mocked").`when`(spy, "privateMethod")
18+
assertEquals("private mocked", spy.publicMethod())
19+
PowerMockito.verifyPrivate(spy, times(2)).invoke("privateMethod")
20+
}
21+
22+
@Test
23+
fun checkMockConstructor() {
24+
val obj = Data()
25+
assertEquals(0, obj.number)
26+
assertEquals("", obj.text)
27+
obj.number = 1
28+
obj.text = "text"
29+
30+
PowerMockito.whenNew(Data::class.java).withNoArguments().thenReturn(obj)
31+
val newObj = Data()
32+
assertEquals(1, newObj.number)
33+
assertEquals("text", newObj.text)
34+
}
35+
}

mockito/test/VerifyTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class VerifyTest {
2+
3+
lateinit var mock: Data
4+
lateinit var manager: Manager
5+
6+
@Before
7+
fun init() {
8+
mock = mock(Data::class.java)
9+
manager = Manager(mock)
10+
}
11+
12+
@Test
13+
fun checkHowManyTimesGetInfoCalled() {
14+
verifyZeroInteractions(mock) //any methods called on the mock
15+
verify(mock, never()).getInfo()
16+
17+
manager.fetchData()
18+
19+
verify(mock, times(1)).getInfo()
20+
verify(mock, atLeast(1)).getInfo()
21+
verify(mock, atMost(3)).getInfo()
22+
verifyNoMoreInteractions(mock) //no others method called
23+
}
24+
25+
26+
@Test
27+
fun checkArgsOfGetInfo() {
28+
val captor = forClass(String::class.java)
29+
manager.fetchDataWithMessage("message")
30+
31+
//verify args passed into getInfo method
32+
verify(mock).getInfo(captor.capture())
33+
assertEquals("message", captor.value)
34+
}
35+
}

0 commit comments

Comments
 (0)