요약
kotlin 에서 인기를 얻고 있는 mockk test libary 를 java 에서 써보려고 시도한 내용을 남김
WHY
java 환경 유지 필요
kotlin compile은 너무 느려요
mockito vs mockk (Like!!!)
relaxed mocking 의 편리함 ( but 주의해서 사용 필요)
HOW
mockk wrapper 를 abstract kotlin class 로 생성 후 compile 된 library 형태로 사용
retrofit 등 kotlin code를 활용하는 라이브러리와 비슷한 느낌...
경과
정확한 인자를 사용하면 every, verify 사용가능 ( any() 는 아직 대체 방법을 찾지 못함)
relaxed mock? yes
mock method chaining?
just runs support?
static method mocking?
verify exactly ?
every answers andThenAnswer ?
의견
아직까지는 활용하기 어렵네..
example
MockkForJavaPocTest.java
@ExtendWith(MockKExtension.class)
class MockkForJavaPocTest extends MockKForJava {
@InjectMockk
private Subject subject;
@Mockk(relaxed = true)
private SubComponent sub;
@Test
void test() {
// given
givenK(() -> sub.call("hello"), "-mock-return");
// when
String result = subject.call("hello");
// then
assertThat(result).isEqualTo("hello");
verifyK(() -> sub.call("hello-mock-return"));
}
static class Subject {
private final SubComponent sub;
public Subject(SubComponent sub){ this.sub = sub; }
public String call(String arg) { return arg + sub.subCall(arg); }
}
static class SubComponent {
String subCall(String arg){ return arg; }
}
}
implementation (trying)
MockKForJava.kt
open class MockKForJava {
fun givenK(fn: ()-> Any, ret: Any) {
every { fn() } returns ret
}
fun givenK(fn: ()-> Void) {
justRun { fn() }
}
fun veirifyK(fn: ()-> Any) {
verify{ fn() }
}
}
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 9월 4일 오후 3:19