본문
Unit Test 기본 실습
컴퓨터/이론: 안드로이드 2020. 12. 20. 16:27
도입
이번 포스팅에서는 Mockito를 이용해 지난 시간 정리했던 mock
, spy
, stub
에 대해 실습할 예정이다.
실습
아래 클래스는 실습을 위해 사전에 정의한 의존성 및 클래스 이다.
dependencies {
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
testImplementation "org.mockito:mockito-inline:3.6.28"
}
data class RoomInfo(
val roomId: Int = DEFAULT_INT,
val messageId: Int = DEFAULT_INT /* DEFAULT_INT is -1 */
)
class SharedViewModel(
private val roomInfo: RoomInfo
) : ViewModel() {
var roomId: Int = DEFAULT_INT /* DEFAULT_INT is -1 */
fun invokeIfComebackFromMessageList(block: () -> Unit) {
if (roomInfo.roomId != DEFAULT_INT) {
print("Test")
block.invoke()
}
}
}
Mock & Stub
Mocking을 했을 때 stubbing하지 않은 값의 경우, 다른 결과를 반환해 Test에 실패한다.
@Test
fun testMock() {
val stubInt = 10
// Create mockObject
val mockRoomInfo = mock<RoomInfo> {
// Stubbing mock
on { roomId } doReturn stubInt
}
// Check stubbing
assertEquals(stubInt, mockRoomInfo.roomId)
assertEquals(ConstUtil.DEFAULT_INT, mockRoomInfo.messageId)
}
// Result
java.lang.AssertionError:
Expected :-1
Actual :0
Spy & Stub
Spy를 사용했을 때 stubbing하지 않은 값의 경우, 실제 class를 호출하기 때문에 Test에 성공한다.
@Test
fun testSpy() {
val stubInt = 10
// Create spy
val mockRoomInfo = spy<RoomInfo> {
// Stubbing mock
on { roomId } doReturn stubInt
}
// Create spy by real class
val spyRoomInfo2 = spy(RoomInfo(stubInt, stubInt)) {
// stubbing mock
on { roomId } doReturn stubInt
}
// Check stubbing
assertEquals(stubInt, mockRoomInfo.roomId)
assertEquals(ConstUtil.DEFAULT_INT, mockRoomInfo.messageId)
}
// Result
Test success!
ShareViewModel Test
테스트할 ViewModel을 생성하고 의존성이 있는 class를 mocking해 전달한다.
stubbing을 통해 값을 설정해 ViewModel을 테스트한다.
@Test
fun testMock() {
val expectedInvoke: (() -> Unit) = mock()
val stubInt = 10
// Create mockObject
val mockRoomInfo = mock<RoomInfo> {
// Stubbing mock
on { roomId } doReturn stubInt
}
// Check method
val viewModel = SharedViewModel(mockRoomInfo)
viewModel.invokeIfComebackFromMessageList(expectedInvoke)
verify(expectedInvoke).invoke()
}
#mock #stub #spy #testcode
'컴퓨터 > 이론: 안드로이드' 카테고리의 다른 글
AndroidJUnitRunner (0) | 2020.12.25 |
---|---|
Unit Test 개념 및 Lifecycle (0) | 2020.12.19 |
DataStore 개념 및 실습 (0) | 2020.12.13 |
Gradle implementation (0) | 2020.04.02 |
generated Folder 란? (0) | 2020.03.16 |
댓글