рдореЛрдмрд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдореЙрдХ рд╕рд░реНрд╡рд░

рдирд╡реАрдирддрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдореЗрд░реЗ рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рдо рдХреЛ рд╣реА рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ - рдкрд░реАрдХреНрд╖рдг рдЕрдВрджрд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рдЧрд┐рд░реЗ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреАред

рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдореЛрдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рдЖрдЬ рдЗрд╕ рдХрд╛рдВрдЯреЗрджрд╛рд░ рд░рд╛рд╕реНрддреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЫрд╡рд┐

рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдПрдирдбреАрдП рдХреЗ рддрд╣рдд) рдХреЗ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рдЫреВрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд░рдИрдПрд╕рдЯреА рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдпрд╛, рдЬреЛ рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрддреЗ рдкрд░ рдПрдЪрдЯреАрдЯреАрдкреА рдЕрдиреБрд░реЛрдз (рдЬреАрдИрдЯреА / рдкреЛрд╕реНрдЯ) рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб, рдбрд┐рд╕реНрдкреИрдЪрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдг GitLab рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИрдВ?


рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдордЬрд╝рд╛рдХ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдереЗ:

  • рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рдпрд╛ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдПрдХ рдореЙрдХ рд╕рд░реНрд╡рд░ рддреИрдирд╛рдд рдХрд░реЗрдВ (рдпрджрд┐ рд╣рдо рдЧреЛрдкрдиреАрдп рдШрдЯрдирд╛рдХреНрд░рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ);
  • рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ - рдЙрд╕ рдлрд╝реЛрди рдкрд░, рдЬрд┐рд╕ рдкрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЯреЗрд╕реНрдЯ рдмреЗрдВрдЪ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рджрд░рдЕрд╕рд▓, рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдВрдб рдХреА рддрд░рд╣, рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдФрд░ рдпрд╣рд╛рдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдХреЗрдВрджреНрд░ рдорд░ рдЧрдпрд╛ рд╣реИ, рдЬрд╡рд╛рдм рджреЗрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рдореЙрдирд┐рдЯрд░ рдмрджрд▓рдиреЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╛рди рдХрд░реЗрдВред рд╣рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдп рдЬреЛрдбрд╝рддреЛрдбрд╝ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрдард╛рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред

рдПрдХ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рдЪрдпрди


рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рд╣реИрдВред рдореИрдВрдиреЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдореЗрдВ рдореИрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛:

  • рдореЙрдХ-рд╕рд░реНрд╡рд░ , рд╡рд╛рдпрд░рдореЙрдХ - рджреЛ рдирдХрд▓реА рд╕рд░реНрд╡рд░ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ред рдЪреВрдВрдХрд┐ рд╕рднреА рдкреНрд░рдпреЛрдЧ рдПрдХ рдЬреАрд╡рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реБрдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдХрд╛ рд╕рдордп рд╕реАрдорд┐рдд рдерд╛ред рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рджрд┐рдиреЛрдВ рддрдХ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
  • рд░реЗрд╕реНрдЯрдореЙрдХ okhttpmockwebserver рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдпрд╣ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд░реИрдкрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдиреЗ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдЫреБрдкрд╛рдпрд╛, рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЗ рдкреЛрд░реНрдЯ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред рд░реЗрд╕реНрдЯрдореЙрдХ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреЛрд░реНрдЯ рдкрд░ рд╢реБрд░реВ рд╣реБрдЖред рдХреЛрдб рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рд╕рд░реНрд╡рд░ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдЗрдирдкреБрдЯ рдкрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рдкреЛрд░реНрдЯ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреЛрдИ рднреА рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдереАред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рд░реИрдкрд░ рдХреЛ рдордирд╛ рдХрд░ рджрд┐рдпрд╛ред
  • Okhttpmockwebserver - рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдореЙрдХ рд╕рд░реНрд╡рд░ рдкрд░ рд░реБрдХ рдЧрдпрд╛, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рде рдорд┐рд▓ рдЧрдпрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ред

рд╣рдо рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ


Okhttpmockwebserver рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЖрдкрдХреЛ рдХрдИ рдХрд╛рд░реНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

  • рдЙрддреНрддрд░реЛрдВ рдХреА рдХрддрд╛рд░ ред рдореЙрдХ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлреАрдлреЛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ API рдФрд░ рдХрд┐рд╕ рдкрде рдкрд░ рдкрд╣реБрдВрдЪреВрдВрдЧрд╛, рдирдХрд▓реА рд╕рд░реНрд╡рд░ рдЗрд╕ рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрджреЗрд╢ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред
  • рдкреНрд░реЗрд╖рдгрдХрд░реНрддрд╛ рдЖрдкрдХреЛ рдРрд╕реЗ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ URL рдПрдХ рдкрде рд╕реЗ рдЖрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП / get-login /ред рдЗрд╕ / рдЧреЗрдЯ-рд▓реЙрдЧрд┐рди / рдореЙрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ рдПрдХ рдПрдХрд▓, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред
  • рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ ред рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреЗрдЬрддрд╛ рд╣реИ (рдЬреЛ рджреА рдЧрдИ рд╢рд░реНрддреЛрдВ рдореЗрдВ, рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрддреНрддрд░ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдз рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрддрд╛рд░


рдореЙрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрддрд╛рд░ рд╣реИред рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрддрд╛ рдФрд░ рдкреЛрд░реНрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рдЗрд╕ рддрдереНрдп рдкрд░ рднреА рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ - FIFO (рдкрд╣рд▓реА рдмрд╛рд░ рдкрд╣рд▓реЗ рдмрд╛рд╣рд░)ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореЙрдХ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдВред

class QueueTest: BaseTest() { @Rule @JvmField var mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java) @Before fun initMockServer() { val mockServer = MockWebServer() val ip = InetAddress.getByName("127.0.0.1") val port = 8080 mockServer.enqueue(MockResponse().setBody("1st message")) mockServer.enqueue(MockResponse().setBody("2nd message")) mockServer.enqueue(MockResponse().setBody("3rd message")) mockServer.start(ip, port) } @Test fun queueTest() { sendGetRequest("http://localhost:8080/getMessage") assertResponseMessage("1st message") returnFromResponseActivity() sendPostRequest("http://localhost:8080/getMessage") assertResponseMessage("2nd message") returnFromResponseActivity() sendGetRequest("http://localhost:8080/getMessage") assertResponseMessage("3rd message") returnFromResponseActivity() } } 

рдЯреЗрд╕реНрдЯ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЬреЛ рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реВрдВред
рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдХрд▓реА рд╕рд░реНрд╡рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрддрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЧреБрдЬрд░рддрд╛ рд╣реИред

рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдореЙрдХ рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд╕реНрдкреИрдЪрд░ рдмрдирд╛рдП: SimpleDispatcher, OtherParamsDispatcher рдФрд░ ListingDispatcherред

SimpleDispatcher


Okhttpmockwebserver Dispatcher() рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dispatcher() рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ dispatch рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 class SimpleDispatcher: Dispatcher() { @Override override fun dispatch(request: RecordedRequest): MockResponse { if (request.method == "GET"){ return MockResponse().setResponseCode(200).setBody("""{ "message": "It was a GET request" }""") } else if (request.method == "POST") { return MockResponse().setResponseCode(200).setBody("""{ "message": "It was a POST request" }""") } return MockResponse().setResponseCode(200) } } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдХреЛрдИ GET рдЖрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ GET рдЕрдиреБрд░реЛрдз рд╣реИред рдпрджрд┐ POST, рдореИрдВ POST рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реВрдВред рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рдЕрдиреБрд░реЛрдз рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВред

SimpleDispatcher рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ - SimpleDispatcher рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореЙрдХ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░ рдЗрд╕ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рдпрдо рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╡рд╣реА рдбрд┐рд╕реНрдкреИрдЪрд░ред

SimpleDispatcher рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╕реНрд░реЛрдд рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

OtherParamsDispatcher


dispatch рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рд╣рдЯ рд╕рдХрддрд╛ рд╣реВрдВ:

 class OtherParamsDispatcher: Dispatcher() { @Override override fun dispatch(request: RecordedRequest): MockResponse { return when { request.path.contains("?queryKey=value") -> MockResponse().setResponseCode(200).setBody("""{ "message": "It was a GET request with query parameter queryKey equals value" }""") request.body.toString().contains("\"bodyKey\":\"value\"") -> MockResponse().setResponseCode(200).setBody("""{ "message": "It was a POST request with body parameter bodyKey equals value" }""") request.headers.toString().contains("header: value") -> MockResponse().setResponseCode(200).setBody("""{ "message": "It was some request with header equals value" }""") else -> MockResponse().setResponseCode(200).setBody("""{ Wrong response }""") } } } 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрде рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрдВрдбрд▓ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдкрд░ рдПрдХ рд╢рд░реНрдд рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, тАЬ?queryKey=valueтАЭ ред
рджреВрд╕рд░реЗ, рдпрд╣ рд╡рд░реНрдЧ рдЖрдкрдХреЛ POST рдпрд╛ PUT рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ toString() ред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм тАЬbodyKeyтАЭ:тАЭvalueтАЭ рд╕рд╣рд┐рдд рдПрдХ POST рдЕрдиреБрд░реЛрдз тАЬbodyKeyтАЭ:тАЭvalueтАЭ ред рдЗрд╕реА рддрд░рд╣, рдореИрдВ рдЕрдиреБрд░реЛрдз header : value ( header : value ) рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

ListingDispatcher


рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - ListingDispatcherред рдЙрд╕реА рддрд░рд╣, рдореИрдВ dispatch рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдореИрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реА рд╕рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореМрдХреЛрдВ рдХреЗ рд▓рд┐рдП stubsList ( stubsList ) - mok рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ stubsList ред

 class ListingDispatcher: Dispatcher() { private var stubsList: ArrayList<RequestClass> = defaultRequests() @Override override fun dispatch(request: RecordedRequest): MockResponse = try { stubsList.first { it.matcher(request.path, request.body.toString()) }.response() } catch (e: NoSuchElementException) { Log.e("Unexisting request path =", request.path) MockResponse().setResponseCode(404) } private fun defaultRequests(): ArrayList<RequestClass> { val allStubs = ArrayList<RequestClass>() allStubs.add(RequestClass("/get", "queryParam=value", "", """{ "message" : "Request url starts with /get url and contains queryParam=value" }""")) allStubs.add(RequestClass("/post", "queryParam=value", "", """{ "message" : "Request url starts with /post url and contains queryParam=value" }""")) allStubs.add(RequestClass("/post", "", "\"bodyParam\":\"value\"", """{ "message" : "Request url starts with /post url and body contains bodyParam:value" }""")) return allStubs } fun replaceMockStub(stub: RequestClass) { val valuesToRemove = ArrayList<RequestClass>() stubsList.forEach { if (it.path.contains(stub.path)&&it.query.contains(stub.query)&&it.body.contains(stub.body)) valuesToRemove.add(it) } stubsList.removeAll(valuesToRemove) stubsList.add(stub) } fun addMockStub(stub: RequestClass) { stubsList.add(stub) } } 

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЦреБрд▓рд╛ рд╡рд░реНрдЧ RequestClass рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рднреА рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ response рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ MockResponse рдСрдмреНрдЬреЗрдХреНрдЯ (200 рдкреНрд░рддрд┐рд╕рд╛рдж рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп responseText ), рдФрд░ рдПрдХ matcher рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ true рдпрд╛ false рджреЗрддрд╛ true ред

 open class RequestClass(val path:String = "", val query: String = "", val body:String = "", val responseText: String = "") { open fun response(code: Int = 200): MockResponse = MockResponse() .setResponseCode(code) .setBody(responseText) open fun matcher(apiCall: String, apiBody: String): Boolean = apiCall.startsWith(path)&&apiCall.contains(query)&&apiBody.contains(body) } 

рдирддреАрдЬрддрди, рдореИрдВ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдореБрдЭреЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ рдореИрдВ рдХреБрдЫ рд╕реНрдЯрдмреНрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордпред
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 fun replaceMockStub(stub: RequestClass) { val valuesToRemove = ArrayList<RequestClass>() stubsList.forEach { if (it.path.contains(stub.path)&&it.query.contains(stub.query)&&it.body.contains(stub.body)) valuesToRemove.add(it) } stubsList.removeAll(valuesToRemove) stubsList.add(stub) } 

рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, рдкрд░реАрдХреНрд╖рдг рд╕рд░рд▓ рд░рд╣рддреЗ рд╣реИрдВред рдореИрдВ рднреА рдореЙрдХ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ ListingDispatcher рдЪрдпрди рдХрд░реЗрдВред

 class ListingDispatcherTest: BaseTest() { @Rule @JvmField var mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java) private val dispatcher = ListingDispatcher() @Before fun initMockServer() { val mockServer = MockWebServer() val ip = InetAddress.getByName("127.0.0.1") val port = 8080 mockServer.setDispatcher(dispatcher) mockServer.start(ip, port) } . . . } 

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдЯрдм рдХреЛ POST рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛:

 @Test fun postReplacedStubTest() { val params: HashMap<String, String> = hashMapOf("bodyParam" to "value") replacePostStub() sendPostRequest("http://localhost:8080/post", params = params) assertResponseMessage("""{ "message" : "Post request stub has been replaced" }""") } 

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдорд┐рдд dispatcher рд╕реЗ replacePostStub рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдирдИ response рдЬреЛрдбрд╝реАред

 private fun replacePostStub() { dispatcher.replaceMockStub(RequestClass("/post", "", "\"bodyParam\":\"value\"", """{ "message" : "Post request stub has been replaced" }""")) } 

рдКрдкрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдореИрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдЯрдм рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рд╕реНрдЯрдм рдЬреЛрдбрд╝рд╛, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдерд╛ред

 @Test fun getNewStubTest() { addSomeStub() sendGetRequest("http://localhost:8080/some_specific_url") assertResponseMessage("""{ "message" : "U have got specific message" }""") } 

 private fun addSomeStub() { dispatcher.addMockStub(RequestClass("/some_specific_url", "", "", """{ "message" : "U have got specific message" }""")) } 

рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ


рдЕрдВрддрд┐рдо рдорд╛рдорд▓рд╛ - рдЕрдиреБрд░реЛрдз рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ - рд╕реНрдиреВрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдореЙрдХ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд▓реМрдЯрд╛рдПред
рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╕рдордп, рдпрд╣ рдореЙрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореИрдВ takeRequest() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

 @Test fun requestVerifierTest() { val params: HashMap<String, String> = hashMapOf("bodyKey" to "value") val headers: HashMap<String, String> = hashMapOf("header" to "value") sendPostRequest("http://localhost:8080/post", headers = headers, params = params) val request = mockServer.takeRequest() assertEquals("POST", request.method) assertEquals("value", request.getHeader("header")) assertTrue(request.body.toString().contains("\"bodyKey\":\"value\"")) assertTrue(request.path.startsWith("/post")) } 

рдКрдкрд░, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ JSON рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЖрдк JSON рд╕реНрддрд░ рдкрд░ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ JSON рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдкрд░ рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдкрд░рд┐рдгрд╛рдо


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдЙрдкрдХрд░рдг (okhttpmockwebserver) рдкрд╕рдВрдж рдЖрдпрд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрддреЗ (рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080 рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рдкрд░ рджрд╕реНрддрдХ рджреЗрдирд╛ рд╣реЛрдЧрд╛; рд╢рд╛рдпрдж рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдкрддреЗ рдкрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореЙрдХ рд╕рд░реНрд╡рд░ рдЬрд╡рд╛рдм рджреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ - рдЬрдм рдирдХрд▓реА рд╕рд░реНрд╡рд░ рдЖрдЧреЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕реНрдЯрдм рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдореЙрдХ рд╕рд░реНрд╡рд░ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЙрдирдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА рдирд╣реАрдВ рдЖрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ "рдореБрдХрд╛рдмрд▓рд╛" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред

рд▓реЗрдЦ рд▓реЗрдЦрдХ: рд░реБрд╕реНрд▓рд╛рди рдЕрдмреНрджреБрд▓рд┐рди

рдкреБрдирд╢реНрдЪ рд╣рдордиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рд░рдиреЗрдЯ рдХреА рдХрдИ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рд╣реИрдВред рд╡реАрдХреЗ , рдПрдлрдмреА рдпрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдЪреИрдирд▓ рдкрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдФрд░ рдЕрдиреНрдп рдореИрдХреНрд╕рд┐рд▓реИрдХреНрдЯ рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкреЗрдЬ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред

Source: https://habr.com/ru/post/hi430530/


All Articles