Matt's Tidbits #82 - 예상치 못한 Mockito 제한 사항
다음 예제 코드를 고려하십시오.
단위 테스트에서 ListProvider
를 조롱하려면 다음을 수행하는 것이 매우 간단합니다.
<스크립트 아이디="gist-ltag"src="https://gist.github.com/mpeng3/2911a827d22e810523b9bdae56ea254e.js"/>
이것이 까다로워지는 경우는 ListProvider.currentList
에 대한 모의 구현을 제공하는 것에 대해 생각할 때입니다. 처음에는 이렇게 하려고 생각했습니다.
whenever(mockListProvider.currentList).thenReturn(listSubject.value)
이 문제는 listSubject
에 새 값을 게시하면 모의(그리고 확장하여 기본 주제)가 해당 시점에 평가되기 때문에 ListProvider.currentList
에 대한 향후 호출에 반영되지 않는다는 것입니다. 정의되어 있습니다.
제가 생각해낸 한 가지 해결 방법은 테스트를 위해 다음과 같은 방법을 정의하는 것이었습니다.
<스크립트 아이디="gist-ltag"src="https://gist.github.com/mpeng3/43edf9e9498ea7214e354ca5b5be70a0.js"/>
listSubject
대신 이것을 사용하면 currentList
에 대한 모의 값을 동시에 업데이트할 수 있습니다.
그러나 이것은 몇 가지 제한 사항이 있습니다. - 즉, 동료가 지적했듯이 매번 모의를 다시 초기화하는 것이 약간 지저분합니다.
다행히 Mockito는 이 - enter thenAnswer()
메소드에 조금 더 적합한 또 다른 옵션을 제공합니다.
whenever(mockListProvider.currentList).thenAnswer { listSubject.value }
이 방법을 사용할 때 주의해야 할 점은 유형 안전하지 않다는 것입니다. - .thenAnswer { 42 }
를 작성하는 것은 완벽하게 유효하며, 테스트를 실행할 때 무언가 잘못했다는 것을 알게 될 것입니다.
고려할 사항 한 가지 더 - Mockito는 가장 Kotlin 친화적인 프레임워크가 아니므로 코드의 대부분이 Kotlin에 있는 경우 MockK 을 고려하여 동일하게 작성할 수 있습니다. 다음과 같은 코드:
<스크립트 id="gist-ltag"src="https://gist.github.com/mpeng3/56061c36102034e2158e8e5588233634.js"/>
이를 더 개선할 수 있는 아이디어/제안 사항이 있습니까? 아래 의견에 알려주십시오! 그리고 앞으로의 소소한 소식에 대한 알림을 받고 싶으시다면 Medium에서 저를 팔로우해주세요.
이 정보는 2020년 6월 25일에 발견되었습니다.
Reference
이 문제에 관하여(Matt's Tidbits #82 - 예상치 못한 Mockito 제한 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mpeng3/matt-s-tidbits-82-an-unexpected-mockito-limitation-5be5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)