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

    함께 읽은 게시물

    iOS 19가 아니라 이제 iOS 26?

    ... 더 보기

    No iOS 19: Apple Going Straight to iOS 26

    MacRumors

    No iOS 19: Apple Going Straight to iOS 26

    무너지고 있는 프론트엔드, 백엔드 직군의 경계에 대한 고찰

    AI 기술이 우리 일상과 산업 전반에 스며들면서 소프트웨어 개발 환경 역시 큰 변화의 물결을 맞이하고 있다. 특히 코딩을 돕는 AI 에이전트의 등장은 개발 생산성에 대한 큰 변화를 만들고 있다. 나 역시 이러한 변화를 체감하며, 나에게 익숙한 소프트웨어 개발의 대표적인 두 축인 프론트엔드와 백엔드 영역에서 AI 기술이 미치는 영향과 그로 인해 변화하는 소프트웨어 엔지니어의 역할에 대해 개인적인 생각을 정리해 본다.

    ... 더 보기

     • 

    저장 33 • 조회 4,583


    게임의 완성도는 고객이 결정한다

    예술 작품은 작가의 생각을 표현하는 도구다. 따라서, 작가의 의도를 얼마나 잘 담아내고 있느냐가 중요하다. 그 의도를 대중이 몰라줄 수도 있고, 알지만 공감하지 못할 수도 있다. 그래도 괜찮다. 대중의 인정을 받지 못해도 예술성은 사라지지 않는다. 잘 만든 작품으로 남아있을 수 있다.

    ... 더 보기

    직장생활은 결국 윗사람과 아랫사람이 나뉠 수밖에 없다. 기업들이 아무리 평등한 관계를 추구한다고 해도, 고용인과 피고용인의 관계마저 사라지는 것은 아니다. 아무리 평등하다 해도 월급 주는 사장님이 을이 될 수는 없지 않은가? 아무리 작은 조직이라도 일을 맡기는 사람과 일을 하는 사람이 존재한다.

    ... 더 보기

    리더 입장에서 보는 ‘일 못하는 직원’ TOP8,리더 입장에서 보는 ‘일 못하는 직원’ TOP8

    체인지그라운드,체인지그라운드

    리더 입장에서 보는 ‘일 못하는 직원’ TOP8,리더 입장에서 보는 ‘일 못하는 직원’ TOP8

    “To jobs that pay the rent! 집세 내주는 직장을 위해!” 영화 <악마는 프라다를 입는다>에 나온 대사다. 저널리스트를 꿈꾸는 대학 졸업생인 주인공. 하지만 그녀는 당장 생계를 위한 일자리가 급하다.

    ... 더 보기

    구성원의 ‘괴로운 밥벌이’를 ‘행복한 밥벌이’로 바꿔주려면? - HSG 휴먼솔루션그룹

    네이버 블로그 | HSG 휴먼솔루션그룹

    구성원의 ‘괴로운 밥벌이’를 ‘행복한 밥벌이’로 바꿔주려면? - HSG 휴먼솔루션그룹

    《그렇게 해주세요》

    ... 더 보기