рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдБ рдореЙрдХрд┐рдЯреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЧрд╛рдЗрдб рд╣реИред рдЗрд╕рдореЗрдВ, рдПрдХ рддрд░рдл, рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рдЪрд┐рдд рдПрдХ рдкрд╛рдардХ рдХреЛ рддреБрд░рдВрдд рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗ, рдФрд░ рди рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ред рджреВрд╕рд░реА рдУрд░, рдореИрдВ рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рддрд╛рдХрд┐ рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝ рд╕рдХреВрдВ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкрд╛ рд╕рдХреВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреВрд▓ рдЧрдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд▓реЗрдЦ, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬрдм рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдХрднреА-рдХрднреА рдореИрдВ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЪрд▓реЛ, рд╕рд┐рдиреЙрдкреНрд╕рд┐рд╕ рдХрд╣реЗрдВред рдЙрд╕реА рд╕рдордп, рдореИрдВрдиреЗ рдкрд╛рда рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдореЙрдХрд┐рдЯреЛ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдФрд░ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ - рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рд╢реБрд░реВ рд╕реЗ рд╣реА рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдереЗред
рд╕рд╛рдордЧреНрд░реА:
- рдореЙрдХрд┐рдЯреЛ: рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдкрд░реНрдпрд╛рд╡рд░рдг, рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЬрд╛рдирд╡рд░
- рдордЬрд╛рдХ рдФрд░ рдЬрд╛рд╕реВрд╕реА
- рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рдмрдВрдзрди
- рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
- рдХреЙрд▓ рд░рд┐рдЬрд▓реНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛
- рдЯреНрд░реИрдХрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЙрд▓
- рдХреНрд╖реЗрддреНрд░ рдореВрд▓реНрдпреЛрдВ рдФрд░ рдореЙрдХрд┐рдЯреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдореЙрдХрд┐рдЯреЛ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рд░реЛрд▓рдмреИрдХ рд╡реНрдпрд╡рд╣рд╛рд░
- рдФрд░ рдХреНрдпрд╛?
рдореЙрдХрд┐рдЯреЛ: рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореЙрдХрд┐рдЯреЛ рдПрдХ рд╕реНрдЯрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХреЛрдб (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓), рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рддрддреНрд╡ рдХреЛ рдЕрдХреНрд╕рд░ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдХреНрд╕рд░ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдиреНрд╣реЗрдВ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрд╛рдХрд┐ рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд░рд▓ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реЛред рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯрдмреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХрд╛рдлреА рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдмреЗрдорд╛рдиреА рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рд╕рднреА рдЗрдВрджреНрд░рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдЙрди рдореЗрдВ рд╕реЗ рдПрдХ (рдФрд░ рд╢рд╛рдпрдж рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз) рдореЙрдХрд┐рдЯреЛ рд╣реИред
рдореЙрдХрд┐рдЯреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рддрдерд╛рдХрдерд┐рдд рдирдХрд▓реА (рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдЯрдм рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдЬреИрд╕рд╛ рдХреБрдЫ) рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдХ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ (рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рдЬреНрдЮрд╛рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИрдВ - рдЖрдорддреМрд░ рдкрд░ рдпрд╣ null
рдпрд╛ 0
)ред рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рд╣реА рдбрд┐рдЧреНрд░реА рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдирддреАрдЬрддрди, рдирдХрд▓реА рдЖрд╡рд╢реНрдпрдХ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдареВрдВрда рдмрди рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреИрд╕реЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдФрд░ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрдХреНрд╖рд╛рдПрдВ, рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ, рдФрд░ рдПрдирдо рдХреЗ рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдПрдВред
рдкрд░реНрдпрд╛рд╡рд░рдг, рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬрд╛рдирд╡рд░
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
- рдореЙрдХрд┐рдЯреЛ: 'org.mockito: рдореЙрдХрд┐рдЯреЛ-рдХреЛрд░: 2.24.0' (рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг)
- TestNG: 'org.testng: testng: 6.14.3' рдПрдХ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ
- AssertJ: 'org.assertj: assertj-core: 3.11.1' рдПрдХ рд╕рддреНрдпрд╛рдкрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ
- рд▓реЛрдореНрдмреЛрдХ: 'org.projectlombok: lombok: 1.18.6' (рд╕рд┐рд░реНрдл рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП)
- рдЬрд╛рд╡рд╛ 8
рдореЗрд░реЗ рдЕрдорд╛рдирд╡реАрдп рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
public interface DataService { void saveData(List<String> dataToSave); String getDataById(String id); String getDataById(String id, Supplier<String> calculateIfAbsent); List<String> getData(); List<String> getDataListByIds(List<String> idList); List<String> getDataByRequest(DataSearchRequest request); }
рдФрд░ рдпрд╣ (рдпрд╣ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╣реЛрдиреЗ рджреЗрдВ) рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рдореЗрдВ рджрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдбред
@AllArgsConstructor @Getter class DataSearchRequest { String id; Date updatedBefore; int length; }
рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреБрдЫ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдЙрд╕ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдПрдВред рдореБрдЭреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
рдореИрдВ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреВрдВрдЧрд╛: рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдирдХрд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ! рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рд▓рдЧрд╛рддрд╛рд░ рдХрд░реВрдВрдЧрд╛:
- рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдореЗрд░реА рд╕реЗрд╡рд╛ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдпрд╛;
- рдЗрд╕реЗ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕рдореЗрдВ
DataService
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реИ), рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛; - рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛;
- рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдореЙрдХ рдХреА рд╡рд┐рдзрд┐ (рдУрдВ) рдХреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрджреЗрд╢ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдкрд┐рдЫрд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдордЬрд╛рдХ рдФрд░ рдЬрд╛рд╕реВрд╕реА
рдореЙрдХрд┐рдЯреЛ рдХрд╛ рдХреЗрдВрджреНрд░реАрдп рд╡рд░реНрдЧ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, BDDMockito
рдирд╛рдордХ рдПрдХ рд╡рд░реНрдЧ рд╣реИ ( BDDMockito
рд╡рд░реНрдЧ рднреА рд╣реИ рдЬреЛ рдмреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛) ред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЗрд╕рдХреЗ рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред
DataService
рд╡рд░реНрдЧ рдХрд╛ рдордЬрд╝рд╛рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:
DataService dataServiceMock = Mockito.mock(DataService.class);
рд╣реЛ рдЧрдпрд╛ - рдореБрдЭреЗ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдпрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ)ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ рд╡реНрдпрд╕рдиреА рдЬрд╛рдВрдЪ рдмрд╛рдж рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдЧрд╛: рди рдХреЗрд╡рд▓ dataServiceMock.getClass()
true
рд▓реМрдЯреЗрдЧреА, рдмрд▓реНрдХрд┐ dataServiceMock.getClass()
рднреА dataServiceMock.getClass()
- рдЕрд░реНрдерд╛рддреН dataServiceMock.getClass()
ред рдХреБрдЫ рдФрдкрдЪрд╛рд░рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рдПрдХ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИ, рдЬреЛ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ: рдЖрдЦрд┐рд░рдХрд╛рд░, рдкрд╣рд▓реЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд┐рд░реНрдл рджреВрд╕рд░реЗ рд╕реЗ рдЕрдкреНрд░рднреЗрджреНрдп рд╣реЛрдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдХрд┐рдЯреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ - Mockito.mockingDetails
рд╡рд┐рдзрд┐ред рдЗрд╕реЗ рдПрдХ рдордирдорд╛рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдХреЗ, рдореБрдЭреЗ MockingDetails
рдХреНрд▓рд╛рд╕ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╕реНрддреБ рдореЙрдХрд┐рдЯреЛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддреА рд╣реИ: рдЪрд╛рд╣реЗ рд╡рд╣ рдирдХрд▓реА рд╣реЛ, рдЬрд╛рд╕реВрд╕реА рд╣реЛ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ), рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╡рд╣ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рдореИрдВ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд▓реА рдмрдирд╛рдиреЗ рдпрд╛ рдПрдирдо рдХреЗ рдПрдХ рдирдХрд▓реА рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдпрд╛ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдХрд┐рдЯреЛ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдКрдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рдЗрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрдирд╛рдПрдБ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЯреНрд░реА рдХреЗ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде) рдлрд╝рд╛рдЗрд▓ test/resources/mockito-extensions/org.mockito.plugins.MockMaker
рдФрд░ рдЗрд╕рдореЗрдВ рд▓рд╛рдЗрди рдбрд╛рд▓реЗрдВ:
mock-maker-inline
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЕрдВрддрд┐рдо рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдПрдирдо рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдВрддрд┐рдо рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЬреЛ рдПрдХреНрд╢рди рдорд┐рд▓рд╛ рд╡рд╣ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИ: рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛, рдФрд░ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП null
рд╣реЛрдЧрд╛ рдФрд░ рдЖрджрд┐рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП 0
ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдпрджрд┐ рд╡рд┐рдзрд┐ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддреА рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЙрдХ null
рдирд╣реАрдВ рд▓реМрдЯреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣ рдЦрд╛рд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, List
рдпрд╣ рдПрдХ рдЦрд╛рд▓реА LinkedList
рднрд▓реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реЛред рд▓реЗрдХрд┐рди рд╕рд░рдгрд┐рдпреЛрдВ, рдЖрджрд┐рдо рдпрд╛ рд╡рд╕реНрддреБ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ null
рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ (рдФрд░ рди рдХреЗрд╡рд▓ рдпрд╣) MockSettings
рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдПрдХ рддрд░реАрдХрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореБрдЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рд╕реНрдЯрдм рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдХреЗрд╡рд▓ рднрд╛рдЧ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛? рдпрджрд┐ рд╣рдо рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрдорддреМрд░ рдкрд░ (рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ) рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдареАрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореЙрдХрд┐рдЯреЛ рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдЬрд╛рд╕реВрд╕ рд╣реИрдВ, "рдЬрд╛рд╕реВрд╕ред" рдореМрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрдЧ рдФрд░ рддреИрдпрд╛рд░ рд╡рд╕реНрддреБ рджреЛрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
DataService dataServiceSpy = Mockito.spy(DataService.class);
рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рддреЗ рд╕рдордп, рдпрджрд┐ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдирдХрд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдФрд░ рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рддреЛ рдореЙрдХрд┐рдЯреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдРрд╕рд╛ рдХреЛрдИ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рд╕реВрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдореБрдЭреЗ рдирдХрд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рджреЗрддреЗ рд╣реИрдВ: рд╡реЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ)ред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдЬрд╛рд╕реВрд╕реА рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛! рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд╕реВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рдмрдВрдзрди
рддреЛ, рдХреИрд╕реЗ рдореИрдВ рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рдпрд╛ рдЬрд╛рд╕реВрд╕реА рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╣рдореЗрд╢рд╛ рд╣рд░ рдЬрдЧрд╣ рдмрд╕ "рдирдХрд▓реА" рд▓рд┐рдЦреВрдВрдЧрд╛ - рдЗрд╕рдХрд╛ рдорддрд▓рдм "рдирдХрд▓реА рдпрд╛ рдЬрд╛рд╕реВрд╕" рд╣реЛрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рди рдХрд╣рд╛ рдЬрд╛рдПред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ: рдЬрдм рдПрдХ рдореЙрдХ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рдерд╛ (рдЕрд░реНрдерд╛рдд, рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдореЙрдХрд┐рдЯреЛ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ - рдореБрдЦреНрдп рдПрдХ, рдЬрд╣рд╛рдБ рд╕рдВрднрд╡ рд╣реЛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдХ, рдЬрд╣рд╛рдБ рдореБрдЦреНрдп рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Mockito.when
рдкрджреНрдзрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ "рдкреИрд░рд╛рдореАрдЯрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддреА рд╣реИ (рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХреНрд░рд┐рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ) рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ OngoingStubbing
, рдЬреЛ OngoingStubbing
рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ Mockito.then...
рдкрд░рд┐рд╡рд╛рд░ (рдпрд╣ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╕реЗрдЯ рд╣реЛрддреА рд╣реИ)ред рд╕рднреА рдПрдХ рд╕рд╛рде, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
List<String> data = new ArrayList<>(); data.add("dataItem"); Mockito.when(dataService.getAllData()).thenReturn(data);
рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, getAllData()
рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ getAllData()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдореБрдЭреЗ рд╕реВрдЪреА рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ, рдкрд░рд┐рдЪрд┐рдд "рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ" рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЦрд░рд╛рдмреА рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд░рд╣рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдЬрд╛рд╡рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд┐рдВрджреБ рд╕реЗ, рдорд╛рди when
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдУрд╡рд░рдбреНрдпреВрдЬреНрдб рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рдиред рдореЙрдХ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рдорд╛рди рд╣реИ; рдЬрд╛рд╕реВрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдореЙрдХрд┐рдЯреЛ рдХреЗ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдЬрд╛рджреВ рдЕрднрд┐рдирдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, when
рд╡рд┐рдзрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреА (рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреА) рдХреЗрд╡рд▓ рдЕрдЧрд░ рдореЙрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЙрд▓ when
рдмрд╛рдж рдХреЛрд╖реНрдардХ рдХреЗ рдЕрдВрджрд░ рд╣реИред
рдореЙрдХрд┐рдЯреЛ рдореЗрдВ рдПрдХ рдореЙрдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдЕрдХреНрд╕рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ: рдПрдХ рд╡рд┐рдзрд┐ (рдореЙрдХрд┐рдЯреЛ рдХреА рдПрдХ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдХреНрд▓рд╛рд╕) рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдореИрдВ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХреЙрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ: рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ, рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдЗрд╕рдХреА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдереЛрдбрд╝рд╛ рдзреВрдорд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рд▓реА рдЯрдХреНрдХрд░ рдореЗрдВ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЬрд▓реНрдж рд╣реА рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рдд рдФрд░ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Mockito.do...
рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ Stubber
рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд░реНрдд рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрдВрдзрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
List<String> data = new ArrayList<>(); data.add("dataItem"); Mockito.doReturn(data).when(dataService).getData()
рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ, рдХреНрдпреЛрдВ Mockito.when
рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдмреЗрд╣рддрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдкрдХреЛ рдЕрднреА рднреА Mockito.do...
рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ Mockito.do...
? рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, getAllData()
), рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рддрднреА, getAllData()
рдореЗрдВ, рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - Stubber.when
рд╡рд┐рдзрд┐ рд╕реАрдзреЗ Stubber.when
рдкрд╛рд╕ рдЬрд╛рддреА рд╣реИред Stubber.when
рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреГрддрд┐ рдХреЛ рдПрдХ рдЕрддрд┐рд╡реНрдпрд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдВрддрд░ рд╕рдм рдХреБрдЫ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред Mockito.do...
рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ Mockito.do...
рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рджрд┐рдП рдЧрдП рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдВрдЧрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ Mockito.when
рдмреЗрд╣рддрд░ рд╣реИ - рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдореИрдВ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╣реМрд╕рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдореЙрдХ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрд▓ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдЬрд╛рд╕реВрд╕реА рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкреБрдирд░реНрд╡рд┐рддреНрдд рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред ред рдФрд░ рдпрд╣рд╛рдБ Mockito.do...
рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА Mockito.do...
рд▓рд┐рдП рдЖрддрд╛ рд╣реИ Mockito.do...
рдПрдХ рдФрд░ рд╕реНрдерд┐рддрд┐ рдЬрд╣рд╛рдВ рдЖрдк Mockito.do...
рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Mockito.do...
рд╡рд┐рдзрд┐рдпрд╛рдБ void
рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣реА рд╣реИрдВ: рд▓рдВрдмрд┐рдд Mockito.when
рдкреИрд░рд╛рдореАрдЯрд░ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред Mockito.doReturn
рдпрд╣рд╛рдБ Mockito.doReturn
рд╣реИ, рд▓реЗрдХрд┐рди Mockito.doThrow
, Mockito.doAnswer
рдФрд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкрд░реНрдпрд╛рдкреНрдд Mockito.doNothing
ред
рдЕрдЧрд▓рд╛, рдореИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдореИрдВ рдХреЗрд╡рд▓ Mockito.when
рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ Mockito.when
- рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╣реИред
рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдПрдХ рдмрд╛рдд рд╕рдВрднрд╡ рд╣реИ - рдХреЙрд▓ рдХрд╛ рддрдереНрдпред рдЬреИрд╕реЗ рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореИрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдмрд╛рдд рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рджреА рдЧрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рддрд╛ рд╣реВрдВред DataService
рдореЗрдВ рдпрд╣ рд╡рд┐рдзрд┐ рд╣реИ:
String getDataItemById(String id) {
рдЕрдЧрд░ рдореБрдЭреЗ рддрд░реНрдХреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рд╕реА рднреА рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ Mockito.any
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
Mockito.when(dataService.getDataItemById(any())) .thenReturn("dataItem");
рдпрджрд┐ рдореБрдЭреЗ рддрд░реНрдХ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдпрд╛ Mockito.eq
рдХреЗ рддрд░реАрдХреЛрдВ (рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдорддреБрд▓реНрдпрддрд╛ рд╣реИ) рдпрд╛ Mockito.same
(рдпрджрд┐ рд▓рд┐рдВрдХ рддреБрд▓рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Mockito.when(dataService.getDataItemById("idValue")) .thenReturn("dataItem");
рдФрд░ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЪрд╛рд╣рд┐рдП, рддреЛ рдПрдХ рд╣реА Mockito
рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╛ рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ)ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ Mockito.argThat рднреА рд╣реИ (рдФрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕) рдЬреЛ ArgumentMatcher рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:
Mockito.when(dataService.getDataById( Mockito.argThat(arg -> arg == null || arg.length() > 5))) .thenReturn("dataItem");
ArgumentMatchers
рдФрд░ AdditionalMatchers
рдХреНрд▓рд╛рд╕реЗрд╕ рдЖрдкрдХреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдСрдл-рдж-рд╢реЗрд▓реНрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, extraMatchers.or рдФрд░ extraMatchers.and рдЖрдкрдХреЛ рдЕрдиреНрдп рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ: рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ рдореИрдЪрд░реНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ!)
рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдк рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрдИ рдмрд╛рд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдореЙрдбрд▓ рдПрдХ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХрд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░реВрдВрдЧрд╛ рдЬрдм рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрдВрддрд░ рдорд╛рди 5 рд╕реЗ рдХрдо рд╣реЛ рдФрд░ рджреВрд╕рд░рд╛ рдЬрдм рд╕рдорд╛рди рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрд╛рдж рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЬрдЯрд┐рд▓ рдкреИрдЯрд░реНрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ (рд╕реАрдорд╛ рдореЗрдВ - any()
рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЕрд░реНрдерд╛рддреН рджрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд░реНрдХреЛрдВ рдХреЗ рд╕рднреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рддрд░реАрдХрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдореМрдЬреВрдж рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ Mockito
рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд╛ Mockito
рд╕реНрдереИрддрд┐рдХ Mockito
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред Mockito.eq
рдпрд╛ Mockito.same
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХреЙрд▓ рд░рд┐рдЬрд▓реНрдЯ рд╕реЗрдЯ рдХрд░рдирд╛
рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЦреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдареАрдХ рд╣реИ рдХрд┐ рдореЙрдХрд┐рдЯреЛ рдЯреВрд▓рдХрд┐рдЯ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдЦрд╛рдП рдЧрдП рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЙрд▓ рдХрд╛ рдЬрд╡рд╛рдм рдПрдХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЙрд╕рдХрд╛ рдХреЛрдб рджреВрдВрдЧрд╛:
List<String> data = new ArrayList<>(); data.add("dataItem"); Mockito.when(dataService.getAllData()).thenReturn(data);
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╡рд┐рдзрд┐ рдПрдХ рдЖрджрд┐рдо рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ, рддреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд░рд╛рд╖реНрдЯреНрд░ / рдореБрдХреНрдХреЗрдмрд╛рдЬреА рд╣реЛрдЧреАред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдиреНрдпрдерд╛ рд╕реЛрдЪрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ ... рдпрд╛ рдЙрд╕рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ:
Mockito.when(dataService.getDataById("invalidId")) .thenThrow(new IllegalArgumentException());
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ: рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдореЙрдХрд┐рдЯреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:
Mockito.when(dataService.getDataById("invalidId")) .thenThrow(IllegalArgumentException.class);
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдХрд┐рдЯреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ рдпрджрд┐ рдЕрдкрд╡рд╛рдж рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЙрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЬрдм рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА), рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рддреНрдпрдХреНрд╖ рдлрд╝реАрд▓реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдореЙрдХрд┐рдЯреЛ рд╣реИ!), рддрд╛рдХрд┐ рдлреЗрдВрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рднреА рдлрд╝реАрд▓реНрдб null
ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЕрдкрд╡рд╛рдж рдХреА рд╕рд╛рдордЧреНрд░реА рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ type
рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИ), рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдпреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдпрджрд┐, рджрд┐рдП рдЧрдП рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╛рдкрд╕реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдореЗрд╢рд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдп рдпрд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпреЗ рдХреНрд╖рдорддрд╛рдПрдВ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реА рд╡рд┐рдзрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдПрдХ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдЖрдИрдбреА рдХреЗ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛), рдФрд░ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕ рдирдХрд▓реА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдбреЗрдЯрд╛, рд╣рд░ рдмрд╛рд░ рдЗрд╕реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - Mockito.then
ред рдпрд╣ Answer
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ InvocationOnMock
рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕реЗ рдореИрдВ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ (рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рдПрдХ рдмрд╛рд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЗрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирд╕реЗ рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ: рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдмрд╕ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):
Mockito.when(dataService.getDataByIds(Mockito.any())) .thenAnswer(invocation -> invocation .<List<String>>getArgument(0).stream() .map(id -> { switch (id) { case "a": return "dataItemA"; case "b": return "dataItemB"; default: return null; } }) .collect(Collectors.toList()));
рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдореЙрдбрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реИ: рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рдирд╛, рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ред - , - , , , mock- .
Answer
, , тАФ , AnswersWithDelay
, ReturnsElementsOf
. .
: InvocationOnMock
тАФ Object[]
, generic-.
тАФ thenCallRealMethod
. . mock-, spy-. mock , , - null
. spy thenCallRealMethod
spy ; , - .
thenAnswer
: InvocationOnMock
callRealMethod()
тАФ , "" - .
OngoingStubbing
OngoingStubbing
, , , . , . thenReturn
thenThrow
, varargs. .
Mockito.when(dataService.getDataById("a")) .thenReturn("valueA1", "valueA2") .thenThrow(IllegalArgumentException.class);
"valueA1
, тАФ "valueA2
( ), ( ) IllegalArgumentException
.
: (mock' ), . , : , , . verify
.
, , :
Mockito.verify(dataService).getDataById(Mockito.any());
, getDataById
, , . , Mockito, when
, , , mock-. , , , when
, тАФ mock', (. ).
:
Mockito.verify(dataService, Mockito.times(1)) .getDataById(Mockito.any());
Mockito.times
; Mockito.never
. Mockito.atLeast
( Mockito.atLeastOnce
1) Mockito.atMost
, , Mockito.only
, , mock- (. . ).
, Mockito
, VerificationAfterDelay
VerificationWithTimeout
, Mockito.after
Mockito.timeout
. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Mockito.verify(dataService, Mockito.after(1000).times(1)) .getDataById(Mockito.any());
, mock , , , . . after
timeout
, , , тАФ , . , timeout
тАФ . VerificationWithTimeout
never
atMost
: .
, Mockito.any()
. , , тАФ Mockito , , . Mock- , , , , :
dataService.getDataById("a"); dataService.getDataById("b"); Mockito.verify(dataService, Mockito.times(2)).getDataById(Mockito.any()); Mockito.verify(dataService, Mockito.times(1)).getDataById("a"); Mockito.verify(dataService, Mockito.never()).getDataById("c"); dataService.getDataById("c"); Mockito.verify(dataService, Mockito.times(1)).getDataById("c"); Mockito.verifyNoMoreInteractions(dataService);
verifyNoMoreInteractions
( verifyZeroInteractions
) тАФ - ( verify
) mock- тАФ . : varargs, , , !
, , , . , InOrder
:
InOrder inOrder = Mockito.inOrder(dataService);
varargs; тАФ mock- , InOrder
. verify
, Mockito.verify
:
inOrder.verify(dataService, times(2)).saveData(any()); inOrder.verify(dataService).getData();
, saveData
, тАФ getData
. , InOrder
, тАФ .
, , тАФ , . - , , тАФ , , . ArgumentCaptor
capture()
. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
DataSearchRequest request = new DataSearchRequest("idValue", new Date(System.currentTimeMillis()), 50); dataService.getDataByRequest(request); ArgumentCaptor<DataSearchRequest> requestCaptor = ArgumentCaptor.forClass(DataSearchRequest.class); Mockito.verify(dataService, times(1)).getDataByRequest(requestCaptor.capture()); assertThat(requestCaptor.getAllValues()).hasSize(1); DataSearchRequest capturedArgument = requestCaptor.getValue(); assertThat(capturedArgument.getId()).isNotNull(); assertThat(capturedArgument.getId()).isEqualTo("idValue"); assertThat(capturedArgument.getUpdatedBefore()).isAfterYear(1970); assertThat(capturedArgument.getLength()).isBetween(0, 100);
ArgumentCaptor
, , ArgumentCaptor
. getValue()
, getAllValues()
тАФ . , , .
Mock- Mockito
, mock- , тАФ @Mock
- :
MockitoAnnotations.initMocks(this);
( , mock', )
spy @Spy
тАФ @Mock
тАж spy , , ? , тАФ spy .
@Captor
ArgumentCaptor
тАФ , , .
@InjectMocks
. - Mockito, . mock- , . , . - , null
, - . ( ) dependency injection.
Mockito
, : mock (spy, argument captor...), , , . , mock' тАФ , . JUnit , , TestNG тАФ . , , mock' , , , . . , , тАФ , .
, mock- . TestNG @BeforeMethod
( @AfterMethod
). mock' , , ( JUnit тАФ @Before
).
, , тАФ Mockito.reset
Mockito.clearInvocations
. varargs, mock'. , . : (, ) , / mock' , тАФ . , mock' . . , , .
(, ) тАФ MockitoAnnotations.initMocks(this);
ред "" , Mockito.
тАФ Mockito. . mock- , ( mock' ). , MockitoSession
, . TestNG:
@Mock DataService dataService; MockitoSession session; @BeforeMethod public void beforeMethod() { session = Mockito.mockitoSession() .initMocks(this) .startMocking(); } @Test public void testMethod() {
, тАФ , "" (, ) , .
?
Mockito: mock spy-, . , . , , :
- Mockito mock-
MockSettings
( тАФ , mock' - ); - mock-,
MockingDetails
; BDDMockito
Mockito
;- ( JUnit Mockito, ).
Mockito . javadoc' Mockito
.
, , .