@InjectMock으로 테스트할 Service를 주입하고,
@Mock으로 서비스 내 Autowired 된 Repository를 주입했을 때,
Service에 선언된 String filed는 Kotlin이 기본적으로 final Class 이기 때문에
@Mock이나 @Spy를 통해서 초기화가 불가능 했음.
Service Class를 open으로 선언해서 final을 해제 할 수 있었지만 선택하지 않았음
해당 String filed는 @Value annotation으로 yml 파일의 값을 불러오고 있었는데,
@TestPropertySource annotation으로 파일 locations를 설정하거나,
properties를 통해 직접 선언하여 초기화하려 했으나,
@TestPropertySource은 .properties 파일만 활용가능하고, yml은 불가능한 것으로 확인했음
properties 파일을 새로 생성하여 실행했으나, 마찬가지로 초기화에 실패하게 됨
spring boot test 에서 mockMvc 셋팅 및 yml 적용 방법.
이전에는 properties 파일로만 설정을 잡고 했었는데, 막판에 뭐 yml 설정을 들었지만 별다른 필요성은 못...
blog.naver.com
따라서, mockito-inline 라이브러리를 활용하게 되었고, build.gradle 설정에 2개 라이브러리를 추가함
test코드를 수행할 때만 적용하기 위해서, testImplementation 설정을 해줌
testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0'
testImplementation 'org.mockito:mockito-inline:2.21.0'
compile("com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0")
compile("org.mockito:mockito-inline:2.21.0")
[안드로이드] gradle에 라이브러리 추가하는 implementation 종류
gradle에 라이브러리 추가 하는 implementation 종류 안드로이드에서 라이브러리를 사용하려면 gradle에서 빌드를 해주어야 하는데요. 기본적인 implementation 말고 다른 항목들도 있습니다. 1. implementation
cishome.tistory.com
Kotlin에서는 모든 클래스가 기본적으로 final로 선언되어있어
Mockito는 기본적으로 mocking을 할 수 없는 등의 여러 문제가있기 때문에
Niek Haarman이 유지 관리하는 mockito-kotlin 라이브러리를 사용하도록 하게 됨
참고: beomseok95.tistory.com/296
Mockito-Kotlin 알아보기
Mockito-Kotlin 알아보기 Mockito는 유닛 테스트를 위한 Java mocking framework입니다. Mockito를 사용하여 쉽게 Mock Object를 만들어 관리할 수 있습니다. Mockito는 현재 Kotlin과 함께 작동하지만 구문이 최..
beomseok95.tistory.com
다음과 같이 수정하여 해결함
[as-is]
@Mock
private lateinit var testRepository: TestRepository
@Mock
private lateinit var mode: String // ERROR parameter non-null is null
@InjectMock
private lateinit var testService: TestService
@Before
fun setUp() {
MockitoAnnotation.initMocks(this)
}
@Test
fun test() {
val testObject: TestObject( value = "test" )
`when`(testService.getTestObject).thenReturn(testObject) // 해당 동작 사전 정의해서 돌아가도록 설정
~
}
[to-be]
private lateinit var testRepository: TestRepository
private lateinit var testService: TestService
@Before
fun setUp() {
testRepository = mock()
testService = TestService( testRepository = testRepository, value = "test")
}
@Test
fun test() {
val testObject: TestObject( value = "test" )
whenever(testService.getTestObject).thenReturn(testObject)
~
}
+ mockk vs mockito-kotlin 라이브러리 비교
kotlin.libhunt.com/compare-mockito-kotlin-vs-mockk
mockito-kotlin vs mockk | LibHunt
Compare mockito-kotlin and mockk's popularity and activity. Categories: Tests. mockito-kotlin is less popular than mockk.
kotlin.libhunt.com
'Kotlin' 카테고리의 다른 글
Kotlin Model Mapping (0) | 2021.03.03 |
---|