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

    함께 읽은 게시물

    회피를 해야 할까요? 방안을 찾아야 할까요?

    팀이나, 파트등의 조직에서의 생활을 하다 보면은 나의 의사와 다른 상황이 펼쳐지는 일이 꽤 많은 빈도로 발생이 되는거 같아요. 짧다면 짧고, 길다면 긴 조직 생황을 하였지만 가장 어려운 것이 나의 의사와 다른 생각을 가지는 일들이 생기는 것들 같아요.

    ... 더 보기

    실리콘밸리 개발자 vs. 한국 개발자

    실리콘밸리 관련해서 종종 듣는 질문들 중에 다음과 같은 것들이 있다.

    ... 더 보기

     • 

    댓글 5 • 저장 91 • 조회 8,227




    고용노동부에서 주관하는 청년미래플러스 3기를 모집 중이라고 합니다.

    구직자와 재직자 두 가지 트랙을 동시에 모집한다고 하네요.

    • 모집 기간: 6월 15일 ~ 8월 3일

    ... 더 보기

    6년간의 토이프로젝트 여정을 마무리하며 - 기술블로그 구독서비스 회고록

    ... 더 보기

    6년간의 토이프로젝트 여정을 마무리하며 - 기술블로그 구독서비스 회고록

    taetaetae.github.io

    6년간의 토이프로젝트 여정을 마무리하며 - 기술블로그 구독서비스 회고록

     • 

    댓글 2 • 저장 11 • 조회 3,120