Typically, stubbing argument mismatch indicates user mistake when writing tests.
Mockito fails early so that you can debug potential problem easily.
However, there are legit scenarios when this exception generates false negative signal:
- stubbing the same method multiple times using 'given().will()' or 'when().then()' API
Please use 'will().given()' or 'doReturn().when()' API for stubbing.
- stubbed method is intentionally invoked with different arguments by code under test
Please use default or 'silent' JUnit Rule (equivalent of Strictness.LENIENT).
For more information see javadoc for PotentialStubbingProblem class.
org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
๋จ์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ณผ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋ฌ๋ค.
์ฌ๊ธฐ์ stubbing์ด๋ Mock ๊ฐ์ฒด์ ํ๋์ ์กฐ์ํ๋ ๊ฒ์ ๋งํ๋ค. ์๋ฌ๋ฅผ ๋ณด๋ฉด when().then() ๋์ will().given() ๋๋ doReturn().when()์ ์ฌ์ฉํ๋ผ๊ณ ํ๊ณ ์๋ค.
when().thenReturn ๊ณผ doReturn.when() ์ ๋์ ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
when().thenReturn -> Strict Mode (์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ mock ๊ฐ์ฒด ๋ฆฌํด๊ฐ์ ๋ฐํ)
doReturn.when() -> Lateinit Mode (์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์๊ณ mock๊ฐ์ฒด ๋ฆฌํด๊ฐ์ ๋ฐํ)
<ํ ์คํธ ์ฝ๋ ์์ฑ์ ํ์ธํ ๊ฒ>
- ๋ถํ์ํ stubbing์ด ์๋์ง (ํ ์คํธ์์ ์ฐ์ด์ง ์๋ mock ์ฒ๋ฆฌ๊ฐ ์๋์ง)
- strict stubs์์ ๋์ผํ ๋ฉ์๋์์ ์ฌ๋ฌ๋ฒ์ when์ ์ค์ ํ๊ฒ ๋๋ฉด (=์ฌ๋ฌ๋ฒ์ stubbing์ ํ๊ฒ ๋๋ฉด) ํด๋น mock์ resetํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ lateinit๋ชจ๋์ธ lenient().doReturn.when()์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ฑฐ๋ ๊ฐ์ ๋ฉ์๋์ ๋ํด ํ๋ฒ์ when๋ง ํธ์ถํ๊ฒ ํด์ฃผ๋ฉด ๋๋ค.
์ฐธ๊ณ
'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kotlin Kotest @beforeSpec @beforeContainer @beforeTest @beforeEach ์ฐจ์ด (2) | 2022.09.19 |
---|---|
FetchJoin ๊ณผ EntityGraph (0) | 2022.08.21 |
[Spring] detached entity passed to persist ์๋ฌ (0) | 2022.05.26 |
์ธ์ ๊ณผ JWT์ ์ฐจ์ด (0) | 2022.05.23 |
SpringBoot Swagger2 UI์ JWT ํ ํฐ Authorize ๋ฒํผ ๋ฃ๊ธฐ (0) | 2022.02.22 |