mockk 을 java에서 써보려는 시도에 대한 기록
요약 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() } } }