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() }
  }
}

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 9월 4일 오후 3:19

댓글 0

    함께 읽은 게시물

    디자인패턴, 리팩토링, 클린 아키텍처 등등의 책들은 전공서적 보듯이 보는게 아니라 추리소설 보듯이 보는 것임. 이런 책은 추리소설처럼 일부 논리적으로 사고 할 수 있는 능력을 길러주긴 하지만, 기본적으로는 재미로 보는 것임. 경험적인 정보이지 과학적인 지식이 아님을 명심해야 함.

     • 

    저장 1 • 조회 640


    내가 가본 우리나라 - 지도 색칠 사이트

    ... 더 보기

    프론트엔드 관련 피드 수집 사이트입니다

    코드 에디터, AI요약, 구글번역등 기능 넣어서 만들어 봤습니다.

    ... 더 보기

    조회 67


    사이드 프로젝트, 진짜 재미는 후반전에 있다

    며칠 전, 우아한형제들 임동준 님의 유튜브 영상을 보다 마음에 들어오는 메시지를 들었다. 영상은 AI에 대한 이야기였지만, 그 과정에서 나온 이 조언이 더 깊게 남았다.

    ... 더 보기

     • 

    저장 12 • 조회 931



    Ensuring 60fps Animations in SwiftUI

    "

    ... 더 보기

    Ensuring 60fps Animations in SwiftUI (GPU Rendering Optimization)

    iOYES

    Ensuring 60fps Animations in SwiftUI (GPU Rendering Optimization)