Android рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрдиред рднрд╛рдЧ 3 - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдкрд░реАрдХреНрд╖рдг, AndroidMock

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдмрд╛рдд рдХреА рдереА рдХрд┐ MVP рдХреНрдпрд╛ рд╣реИ рдФрд░ MVP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдм рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЯреА-рдЕрд▓рд╛рд░реНрдо рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред

рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдПрдХ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рджреЗрдЦреЗрдВ)


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

public class AlarmEdit extends RoboActivity implements IAlarmEdit { @InjectView(R.id.ae_et_AlarmName) EditText etName; @Inject AlarmEditPresenter presenter; @InjectView(R.id.ae_btn_Save) Button btnSave; @InjectView(R.id.ae_btn_Cancel) Button btnCancel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alarm_edit); presenter.onCreate(this); btnSave.setOnClickListener(this); btnCancel.setOnClickListener(this); } @Override public void onClick(View btn) { AlarmEdit.ClickSourceItem clickItem = AlarmEdit.ClickSourceItem.CANCEL; switch (btn.getId()) { case R.id.ae_btn_Save: clickItem = AlarmEdit.ClickSourceItem.SAVE; break; case R.id.ae_btn_Cancel: clickItem = AlarmEdit.ClickSourceItem.CANCEL; break; } presenter.onClick(clickItem); } @Override public String getAlarmName() { return etName.getText().toString(); } @Override public void setAlarmName(String alarmName) { etName.setText(alarmName); } @Override public Bundle getViewBundle() { return getIntent().getExtras(); } } 

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЛрдмреЛрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред RoboActivity RoboGuice рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред RoboGuice Android рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред
RoboGuice рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ:
code.google.com/p/roboguice/wiki/SimpleExample?tm=6

рдЗрд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ, рдореИрдВ рдСрдирдХреНрд░реАрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдердХрд╛рдКрдкрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдмреВрдЧрд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ:
 etName = (EditText) findViewById(R.id.ae_et_AlarmName); 

RoboGuice рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреНрд░рд┐рдПрдЯ рдХрд░рддрд╛ рд╣реИ, Inject рдЯреИрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ ...
 @InjectView(R.id.ae_et_AlarmName) EditText etName; 

рдореИрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдирд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
<Abbrред рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо> _ <abbrред рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо> _ <рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдирд╛рдо>
рд╕рдВрд╕рд╛рдзрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдвреЗрд░ рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдкреВрд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдПрдХрд▓ рдЖрд░ .рдЖрдИрдбреА рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рдвреЗрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШреЛрд╖рдгрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ RoboGuice рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ:
 @Inject AlarmEditPresenter presenter; 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░реЛрдмреВрдЧрд╛рдЗрд╕ рдХреЗ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧ рд╣реИрдВ рдЬреЛ рдореИрдВ рдмрд╛рдж рдореЗрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

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

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

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

рдпрд╣рд╛рдВ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреЛрддрд╛ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдирдХрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

рдПрдбрд┐рдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЕрд▓рд╛рд░реНрдо рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setAlarmName () рдФрд░ getAlarmName () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

GetViewBundle () рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдЕрд▓рд╛рд░реНрдо рдХреА рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЗрдВрдЯреЗрдВрдЯ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реВрдВред рдЕрд▓рд╛рд░реНрдо рдШрдбрд╝реА рд╕реНрд╡рдпрдВ рдЙрд╕ рдореЙрдбрд▓ рд╕реЗ рдЖрддреА рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдЕрд▓рд╛рд░реНрдо рдШрдбрд╝рд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдореЙрдбрд▓ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдирд╣реАрдВ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкрд╣рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдореЙрдбрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд▓рд╛рд░реНрдо рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЕрд▓рд╛рд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
Roboguice рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдореЙрдбрд▓ рд╣реИред рдпрд╣реА рд╣реИ, рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ Roboguice рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
 @Inject IAlarmListModel alarmListModel; 

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

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

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IAlarmEdit


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ рдФрд░ рдмрд╕ рдЗрд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗ, рд╕рд╛рде рд╣реА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрдиреБрдХрд░рдг рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХреЗред
 public interface IAlarmEdit { public enum ClickSourceItem { SAVE, CANCEL } public abstract String getAlarmName(); public abstract void setAlarmName(String alarmName); public abstract Bundle getViewBundle() } 


рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреИрд╕реЗ рд╣реИ


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

рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ IModelLoader рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрдВрдбрд╛рд░ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ / рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦреВрдВрдЧрд╛ред
 public class AlarmEditPresenter implements IModelReciver { @Inject public IModelLoader modelSaver; private int id; private AlarmEdit view; public void onCreate(IAlarmEdit alarmEdit) { //   ,   //   this.view = alarmEdit; // id    Bundle bundle = view.getViewBundle(); id = bundle.getInt(MainScreenPresenter.BUNDLE_ARG_ALARM_ID); //   ,     // ,      //    . alarmListModel.takeAlarmForEdit(id); //     view.setAlarmName(alarmListModel.getEditingAlarm().getName()); //  ,   //     modelSaver.setReciver(this); } public void onClick(AlarmEdit.ClickSourceItem clickItem) { switch(clickItem) { case SAVE: // ,    alarmListModel.getEditingAlarm().setName(view.getAlarmName()); //     alarmListModel.updateAlarm(alarmListModel.getEditingAlarm()); //   . modelSaver.saveModel(); //   . //     . break; case CANCEL: //     . view.setResult(Activity.RESULT_CANCELED); view.finish(); break; } } @Override public void update(String event) { if(event.equals(IModelLoader.EVENT_ALARM_MODEL_SAVE)) { // ,   . // . view.setResult(Activity.RESULT_OK); view.finish(); } } } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЗрд╕ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдорд╡реАрдкреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рд╡рд░реНрдЧ рдХрд╛ рдРрд╕рд╛ рд╕рджрд╕реНрдп рднреА рд╣реИ:
 @Inject private IDateHolder dateHolder; 

рдореБрдЭреЗ рд╕рдордп рдФрд░ рд╕реНрдерд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IDateHolder рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, Roboguice рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдФрд░ рд╕реНрдерд╛рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╣реИ - рдпрд╣ рдПрдХ рд░реЗрдЦрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд▓реЛрдХреЗрд▓ рдореЗрдВ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдореИрдВ рд╕рдордп рдФрд░ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╣реА рд▓реЛрдХреЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рджреГрд╢реНрдп рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИред рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдкрд░реАрдХреНрд╖рдг


рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореИрдВ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдм рдореИрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ: AlarmEditPresenter рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рд╡рд╣ рдлреЙрд░реНрдо рд╕реЗ рдЖрдИрдбреА рд▓реЗрддрд╛ рд╣реИ, рдореЙрдбрд▓ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЕрд▓рд╛рд░реНрдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдбрд┐рдЯ рдХрдВрдЯреНрд░реЛрд▓ рдореЗрдВ рдЕрдкрдирд╛ рдирд╛рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
 public class TestAlarmEditPresenter extends RoboUnitTestCase<TestApplication> { public class AlarmEditModule extends AbstractAndroidModule { //       presenter- //   RoboGuice    presenter  //          @Override protected void configure() { bind(AlarmEditPresenter.class); bind(IAlarmListModel.class) .toProvider(AlarmListModelProvider.class); } } private IAlarmListModel model; @Override protected void setUp() throws Exception { TestApplication.alarmTestModule = new AlarmEditModule(); super.setUp(); model = AndroidMock.createNiceMock(IAlarmListModel.class); AlarmListModelProvider.alarmListModel = model; } //    private void initializeTest() { AndroidMock.reset(model); } /** *          View * @throws Exception */ @MediumTest public void testAlarmEditOpen() throws Exception { initializeTest(); AlarmItem alarm = new AlarmItem(); alarm.setName("Test Name"); //,   2     model.takeAlarmForEdit(2); //  ,    presenter AndroidMock.expect(model.getEditingAlarm()).andStubReturn(alarm); AndroidMock.replay(model); //    Intent   //,     2 Bundle bundle = new Bundle(); bundle.putInt(MainScreenPresenter.BUNDLE_ARG_ALARM_ID, 2); AlarmEdit view = AndroidMock.createMock(AlarmEdit.class); AndroidMock.expect(view.getViewBundle()).andStubReturn(bundle); //      View view.setAlarmName("Test Name"); AndroidMock.replay(view); //  presenter AlarmEditPresenter presenter = getInjector().getInstance(AlarmEditPresenter.class); //  presenter.onCreate(view); //,      ,    AndroidMock.verify(view); //,        AndroidMock.verify(model); } } 

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

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

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

рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╣реА, рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рдореБрд▓реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ:
рдореИрдВ рдПрдХ рдЕрд▓рд╛рд░реНрдо рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рд┐рдореНрдпреБрд▓реЗрдЯреЗрдб рдореЙрдбрд▓ рдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдкреНрд░рд╕реНрддреЛрддрд╛ рдПрдХ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдЕрд▓рд╛рд░реНрдо рдорд╛рдВрдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддреИрдпрд╛рд░ рдЕрд▓рд╛рд░реНрдо рдХреЛ рдЙрд╕реЗ рд▓реМрдЯрд╛ рджреЗрдВ:
 AndroidMock.expect(view.getViewBundle()).andStubReturn(bundle); 

рдореИрдВ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдХреЙрд▓реЛрдВ рдХреА рдЙрдореНрдореАрдж рд╣реИ:
 //,   2     model.takeAlarmForEdit(2); ..... //      View view.setAlarmName("Test Name"); 

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

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдХрд┐рдП:

 //,      ,    AndroidMock.verify(view); //,        AndroidMock.verify(model); 

рд╢реЗрд╖ рд╡рд┐рд╡рд░рдг рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛:

AndroidMock


рдпрд╣ рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВ:
code.google.com/p/android-mock

рдпрд╣рд╛рдВ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдбрдореЙрдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред

рд╕рднреА рдореЙрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

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

рджреВрд╕рд░рд╛ред рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЖрддреА рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдкрдВрдХреНрддрд┐ рд╣реИ:
 AndroidMock.expect(view.getViewBundle()).andStubReturn(bundle); 

рдЖрдорддреМрд░ рдкрд░ рдирдХрд▓ рдХреА рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рдЕрднреА рддрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЬрдм рд╡рд┐рдзрд┐ рддреИрдпрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ, рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд┐рд╖рдп рднреА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рд╡реИрд╕реЗ, рдЕрдЧрд░ рдореБрдЭреЗ рджреЛ рдХреЙрд▓ рдХреА рдЙрдореНрдореАрдж рдереА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдиреЗ рд╣реЛрдВрдЧреЗ, рддреЛ рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛:
 AndroidMock.expect(view.getViewBundle()).andReturn(bundle1); AndroidMock.expect(view.getViewBundle()).andReturn(bundle2); 

рддреАрд╕рд░рд╛ред рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВред
рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдкрдВрдХреНрддрд┐ рд╣реИ:
 AndroidMock.verify(view); 

рд╡рд╣ рдЬрд╛рдБрдЪ рдХрд░рддреА рд╣реИред рдХрд┐ рд╕рднреА рдЙрдореНрдореАрджреЛрдВ рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
 AndroidMock.replay(view); 

рдЪрд▓рд╛рдПрдБред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рддрдереНрдп рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╣реА рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
 AndroidMock.expect(view.getViewBundle(1)).andReturn(bundle1); AndroidMock.expect(view.getViewBundle(2)).andReturn(bundle2); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓ рдерд╛ред

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

AndroidMock.createMock () - рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред рдЖрдорддреМрд░ рдкрд░ рдЙрдореНрдореАрджреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдХреЙрд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк .StubReturn () рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдХреЙрд▓ рд╣реИред рдЖрдк рдХреЙрд▓ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рднреА рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рд░реАрдЯрд░реНрди ()ред рдЯрд╛рдЗрдореНрд╕ (3);

AndroidMock.createStrcitMock () - рдПрдХ рд╕рдЦреНрдд рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдХреНрд░рдо рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред

рдЖрдк AndroidMock рдФрд░ EasyMock рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬреЛрдВ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд╕рд╣рд╛рдпрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкрдврд╝реЗрдВ


- рдкрд░рд┐рдЪрдп
- рдПрдорд╡реАрдкреА рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгред рдЬреЗрдбреА рд╡реЗ
- рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕, рдкрд░реАрдХреНрд╖рдг, AndroidMock
- рдбреЗрдЯрд╛ рдХреА рдмрдЪрддред рдбреЛрдореЗрди рдореЙрдбрд▓, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рд╕рд┐рдВрдЧрд▓рдЯрди рдФрд░ рдмреАрдбреАрдбреА
- рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб, рд░реЛрдмреВрдЧрд╛рдЗрд╕, рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
- рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп, рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рд▓реЙрдЧрд┐рдВрдЧ, ProGuard

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


All Articles