
рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдЬреЛ рдХреБрдЫ рдмрд╛рд╣рд░реА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЕрдХреНрд╕рд░ рдореЙрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ: рдпреЗ рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреВрд░реНрдг рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЬрд╛рд╡рд╛:
рдИрдЬрд╝реАрдореЙрдХ рдФрд░
рдЬреЗрдореЙрдХ рдореЗрдВ рдореЛрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдХрд░реВрдВрдЧрд╛ ред
JUnit рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЗрди рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред
рдкреНрд░рд╢реНрди рдореЗрдВ рдХрд╛рд░реНрдп
рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
1 2 3 4 5 6 7 8 9
| public class WayTooComplexClass { public WayTooComplexClass(String serverAddress) {} public boolean save(long id, String data) {} public String get(long id) {} } |
рдЪрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреЛ рдХрд┐ рдПрд▓рд┐рдкреНрд╕рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг HTTP рдПрдкреАрдЖрдИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рджреАрд░реНрдШрд╡реГрддреНрдд ) рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рд╕реЗ рдЗрд╕ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рддрд╛ рд╣реИред
- рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛрдб рдореЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд▓ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреБрдЫ рд▓реЛрдЧ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛
"рдХреЛрдб рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ" тДв , рдФрд░ рд╡реЗ рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рднрд░рд╛ рд╣реБрдЖ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ HTTP рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рдПрдВрдЧреЗ, рдЬреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП
рдЬреЗрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдРрд╕рд╛ рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛:
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореЙрдХ рд╕рд░реНрд╡рд░ (рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | public class WayTooComplexClassTest { static interface RequestHandler { String handle(String target, String data); } private static class MockHttpServerHandler extends AbstractHandler { private RequestHandler handler; public void setRequestHandler(RequestHandler handler) { this.handler = handler; } @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch ) throws IOException, ServletException { String req = IOUtils.toString(request.getInputStream(), "UTF-8"); String result = handler.handle(target, req); response.setStatus(HttpStatus.ORDINAL_200_OK); response.setContentType("text/plain"); final ServletOutputStream outputStream = response.getOutputStream(); try { outputStream.print(result); } finally { outputStream.close(); } } } private static final MockHttpServerHandler SERVER_HANDLER = new MockHttpServerHandler(); @BeforeClass public static void startServer() throws Exception { org.mortbay.jetty.Server server = new org.mortbay.jetty.Server(); server.setHandler(SERVER_HANDLER); server.start(); } private final WayTooComplexClass wayTooComplex = new WayTooComplexClass("http://localhost/9001"); |
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИрдВред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ 3-5 рд╣реИ, рдЬрд┐рд╕рдореЗрдВ
RequestHandler
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд░реЛрдз рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрддрд╛ http: // habrahabrред W / рдмреНрд▓реЙрдЧ / рдЬрд╛рд╡рд╛ / 136466 / рдкрд░ рд▓рдХреНрд╖реНрдп рдмреЛрд▓реНрдб / рдмреНрд▓реЙрдЧ / рдЬрд╛рд╡рд╛ / 136466 / ) рд╣реЛрдЧрд╛ред рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ред рджреВрд╕рд░рд╛ 32 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 7 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИ -
MockHttpServerHandler
рд╡рд░реНрдЧред
RequestHandler
рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
RequestHandler
, рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реЗ "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рддреАрд╕рд░реА - рд▓рд╛рдЗрдиреЗрдВ 36-41 -
startServer
рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ HTTP рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдкрд░реАрдХреНрд╖рдг
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕реЗрд╡ рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрд┐рдкрд╛ рдХреЛрдб url
{serverAddress}/upload/{id}
рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╣рд╛рдВ
data
рдкрд╛рд╕
data
рдЪрд╛рд╣рд┐рдПред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред
JMock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Mockery context = new JUnit4Mockery(); @Test public void testSaveWithJMock() { final long id = 13; final String data = "nanofilters"; final RequestHandler requestHandler = context.mock(RequestHandler.class); context.checking(new Expectations() {{ one(requestHandler).handle("/upload/" + id, data); will(returnValue("Saved " + id)); }}); SERVER_HANDLER.setRequestHandler(requestHandler); wayTooComplex.save(id, data); context.assertIsSatisfied(); } |
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ JMock рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕рдВрджрд░реНрдн рдкреВрд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди
рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ред рдЙрд╕реА рдХреЗ рдХрдИ рдореЛрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд,
@Before
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░) рдЖрдард╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдирдХрд▓реА рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, резреж-резрей рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛
рдмрд╣реБрдд рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкрдВрдХреНрддрд┐ 11 рдореЗрдВ рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдо рддрд░реНрдХреЛрдВ
("/upload/" + id)
рдФрд░
(data)
рд╕рд╛рде
handle
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрдВрдХреНрддрд┐ 12 рдореЗрдВ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдХреЙрд▓ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛
("Saved " + id)
ред рдпрд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ,
рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИ ред рд╣рдо рдЧрд▓рддреА рд╕реЗ рд╡рд╣рд╛рдВ рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢реНрд▓реЛрдкреЛрдЯ рдЕрдкрд╡рд╛рдж рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: рдЬреЗрдореЙрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (
0
,
false
,
null
рдпрд╛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ) рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдореЙрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдореЙрдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдЖрд╡реЗрджрди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рд▓рд╛рдЗрди 19 рдореЗрдВ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЙрд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрдХреНрд╖рд╛ рдореЗрдВ
@RunWith(JMock.class)
рдПрдиреЛрдЯреЗрд╢рди
@RunWith(JMock.class)
рдХреЛ рдЬреЛрдбрд╝рдХрд░
рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВEasyMock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | IMocksControl control = EasyMock.createControl(); @Test public void testSaveWithEasyMock() { final long id = 15; final String data = "cold fusion reactor"; final RequestHandler requestHandler = control.createMock(RequestHandler.class); expect(requestHandler.handle("/upload/" + id, data)).andReturn("Saved " + id); control.replay(); SERVER_HANDLER.setRequestHandler(requestHandler); wayTooComplex.save(id, data); control.verify(); } |
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЬреЗрдореЙрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдард╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдПрдХ рдирдХрд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ, рджрд╕рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ
рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ : рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд▓реЗрдХрд░ рд░реАрдЯрд░реНрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рддрд░реНрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛрдЧрд╛ред
рдЗрдЬрд╝реАрдореЙрдХ рдореЗрдВ, рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ,
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЦрд╛рдореА рд╣реИ: рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрдВрдХреНрддрд┐ 11 рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ ред рд╕рднреА "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ" рдХреЗ рдмрд╛рдж, рд╣рдо 17 рдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЕрдЧрд░ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ, рддреЛ
рд╢реВрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо expect
рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдПрдХ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
requestHandler.handle("/upload/" + id, data)
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
control
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ , рдФрд░ рдЖрдк рдмрд╕ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
1 2 3 4 5 | final RequestHandler requestHandler = EasyMock.createMock(RequestHandler.class); |
рд╡рд┐рдзрд┐ рдЖрд╣реНрд╡рд╛рди рдХреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЕрдм рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдШрдЯрдХ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
handle
рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬреЗрдЯреА http рдХреА рд╕реНрдерд┐рддрд┐ 500 тАЛтАЛрдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред
JMock
1 2 3 4 5 6 7 8 | @Test public void testErrorHandlingWithJMock() { |
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдмрд╣реБрдд рдХрдо рд╣реИрдВред рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐
returnIterator
рдЕрднреА рднреА рдЗрд╕реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк
Action
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЕрдкрдиреА рд╡реНрдпрд╡рд╕реНрдерд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдпрд╣
рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдЗрддрдирд╛ рдЧрд░реНрдо рдирд╣реАрдВ рд╣реИ ред
EasyMock
1 2 3 4 5 6 | @Test public void testErrorHandlingWithEasyMock() { |
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рднреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╡рд┐рдзрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИ (рдпрд╛рдиреА рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИ), рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░
рд╢реИрд▓реА рдХреА рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдЦреЛ рдЧрдИ рд╣реИ ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
1 2 3 4 5 6 | @Test public void testErrorHandlingWithEasyMock() { |
andThrow
рдЕрд▓рд╛рд╡рд╛
andThrow
рдЖрдк рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
andDelegateTo
, рдЬреЛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ,
рд╡рд┐рдзрд┐ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ (
рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИ! ) рдФрд░
andAnswer
ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
IAnswer
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА
IAnswer
рд╣реИ, рдФрд░
answer
рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рдХреЛрдб рд▓рд┐рдЦреЗрдВред JMock рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдХрдо рд╢рдХреНрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ред
рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рддрд░реНрдХреЛрдВ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдирд╛
рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЙрдХрдбрд╛рдЙрди рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рддрд░реНрдХ рджрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐
target
рддрд░реНрдХ рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ
id
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
JMock
1 2 3 4 5 6 7 | @Test public void testArgumentMatchingWithJMock() { |
рдЬреЗрдореЙрдХ рд╣реИрдорд░реЗрд╕реНрдЯ рдореИрдЪрд░реНрд╕
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореИрдЪрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреИрд░-рдорд╛рдирдХ рд▓рд╛рдареА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
EasyMock
1 2 3 4 5 6 | @Test public void testArgumentMatchingWithEasyMock() { |
рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореИрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП
рддреИрдпрд╛рд░ рдореИрдЪрд░реНрд╕ рдХрд╛ рд╕реЗрдЯ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдЬреЗрдореЙрдХ рдХреА рддрд░рд╣ рд╣реА рд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИред
рдХреЙрд▓ рдХреА рдЧрд┐рдирддреА
рдЕрдм рдЪрд▓реЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВ, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдХрд╛рдлреА рджреВрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рд╕рд░рд▓ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдПрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
JMock
1 2 3 4 5 6 7 | @Test public void testMultipleInvocationsWithJMock() { |
рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, рдкрд┐рдЫрд▓реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдПрдХ рд╢рдмреНрдж рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рдерд╛ рдХрд┐ рдХрд┐рддрдиреЗ рдХреЙрд▓ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЪрд╛рд╣реЗ рд╡рд╣ рд╢реВрдиреНрдп рд╣реЛ рдпрд╛ рдХрд┐рддрдиреА рднреА рд╣реЛред
EasyMock
1 2 3 4 5 6 | @Test public void testMultipleInvocationsWithEasyMock() { |
рдпрд╣рд╛рдВ, рднреА, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдореВрд▓реА рд╢реВрдиреНрдп рд╣реИ:
рдКрдкрд░ рд╕реЗ рдПрдХ рд╕реАрдорд╛ рдХреЗ рдмрд┐рдирд╛ "рдХрдо рд╕реЗ рдХрдо рдПрди рдмрд╛рд░" рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдХрдо рд╕реЗ
atLeastOnce
рд╡рд┐рдзрд┐ рд╣реИред рдХрдо рд╕реЗ рдХрдо рддреАрди рдХреЙрд▓ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
1 2 3 4 5 6 7 | @Test public void testMultipleInvocationsWithEasyMock() { |
рдкреНрд▓рдЧ
рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХрдм рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдХреБрдЫ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
JMock
1 2 3 4 5 6 7 8 | @Test public void testStubMethodsWithJMock() { |
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╕рдордп рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред
allowing
рдмрдЬрд╛рдп
allowing
рдЖрдк
ignoring
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдкреВрд░реЗ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдмрдбрд╝реЗ рд╕реНрдЯрдм рдХреЗ рд╕рд╛рде рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
1 2 3 4 5 6 7 | @Test public void testStubObjectsWithJMock() { |
EasyMock
1 2 3 4 5 6 | @Test public void testStubMethodsWithEasyMock() { |
рд╢реИрд▓реА рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдлреА рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдЧрд╛рдЧ рдмрдирд╛рддреЗ рд╣реИрдВ:
1 2 3 4 5 | @Test public void testStubObjectsWithEasyMock() { final RequestHandler requestHandler = createNiceMock(RequestHandler.class); |
рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ (
0
,
false
рдпрд╛
null
) рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред
String
рд▓рд┐рдП рд╕рд╣рд┐рдд, рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ , рдЬрдмрдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП JMock рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рд╡рд┐рдзрд┐ рдХреЙрд▓ рдЖрджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
рдЕрдХреНрд╕рд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рд╡реНрдпрд╛рдореЛрд╣ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ
(рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ ...) , рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
JMock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Test public void testStrictOrderingWithJMock() { |
рдпрд╣рд╛рдВ рд╣рдо 9 рдФрд░ 13 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрджреЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐
inSequence
рдХреЗрд╡рд▓ рдЙрд╕ рдСрд░реНрдбрд░ рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд░реЗрдЧреА рдЬреЛ рдореЙрдХ-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рджрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓ рд╕рдЦреНрдд рдХреНрд░рдо рдореЗрдВ рдХрд┐рдП
рдЬрд╛рдПрдВрдЧреЗ , рдЖрдкрдХреЛ
рджрд╕ рдмрд╛рд░ inSequence
рд╣реЛрдЧреА ред рд▓реЗрдХрд┐рди
рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рджреГрд╢реНрдпреЛрдВ рдкрд░ рдХреЙрд▓ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред
EasyMock
1 2 3 4 5 6 7 | @Test public void testStrictOrderingWithEasyMock() { |
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдХ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг
рдХреЛ рдХрдИ рдмрд╛рд░ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдкреВрд░рд╛ control
рд╕рдЦреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ), рдФрд░ рдлрд┐рд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдореЛрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЖрджреЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдХрд▓реА рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг
рдХреЛ createStrictMock
рдХрд╣рдХрд░
рдирд┐рд░реНрдорд╛рдг рдкрд░ рддреБрд░рдВрдд рд╕рдЦреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдмреЗрд╢рдХ, рд╣рд░реЗ рд░рдВрдЧ рдХреА рдРрд╕реА рдорд╛рддреНрд░рд╛ рдХреЛ рдПрдХ рдЧрдВрднреАрд░ рдорд╛рдЗрдирд╕ рдХреЗ рд╕рд╛рде рдкрддрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдореЛрдХ (рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг)
рдХрдИ рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрд╕реА рдХреЛрдИ рдмрд╛рдд рднреА рдирд╣реАрдВ рд╣реИред
рдРрд╕реА рд╢рд░реНрддреЗрдВ рдЬрд┐рдирдХреЗ рддрд╣рдд рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬрдм рдХреБрдЫ рдЕрдиреНрдп (рдпрд╛ рд╕рдорд╛рди) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЛ рдЕрдгреНрдбрд╛рдХрд╛рд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ (рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреИрдиреЛрд▓рд╛ рдФрд░ рдпрд╛рд░рдмреЛ) рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рднреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
JMock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Test public void testStatesWithJMock() { |
рдЖрдкрдХреЛ 9, 13, 17 рдФрд░ 21 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдВрдЪ
when
рдХрд┐ рдЖрд╡реЗрджрди
when
рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдХрд░реЗрдВред
рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИ ред рдСрдЯреЛрдореЗрдЯрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдЕрдиреБрдпрд╛рдпреА рд╢рд╛рдпрдж рдЕрдм рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╕рдкрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред
рдИрдЬрд╝реАрдореЙрдХ: рдиреЛ рдПрдирд╛рд▓реЙрдЧ
рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рдЯреЗрд╕реНрдЯрд┐рдВрдЧ
рдЖрдорддреМрд░ рдкрд░, рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдзрд╛рдЧрд╛ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдпреЛрдЬрди рд╣реЛрддреЗ рд╣реИрдВред рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рддрд╛рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рдЕрдкрдиреЗ рдЕрджреНрднреБрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЕрдм рд╕рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХреЛ рд╕реАрдзреЗ рджреЗрдЦреЗрдВред
JMock
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рдкреАрдбрд╝рд╛ рдереА: рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рд▓реЗрдЦрди
(рдЬреИрд╕рд╛ рдХрд┐, рд╕рдВрдпреЛрдЧ рд╕реЗ, рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдкрд░) рдмрд╣реБрдд рдЖрд▓рдВрдХрд╛рд░рд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐
(рдФрд░ рддрдм рд╕реЗ рдореИрдВ рдПрдореНрд╕реНрдЯрд░реНрдбрдо рдореЗрдВ рдерд╛, рдФрд░ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдкрд░ рднреА рдЕрднрд┐рдирдп рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛)
, рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛) ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ JMock 2.6.0-RC2 рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдорд░реЗрд╕реНрдЯ-рдХреЛрд░ 1.3.0RC1 рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдерд╛:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private Synchroniser synchroniser = new Synchroniser(); private Mockery context = new JUnit4Mockery() {{ this.setThreadingPolicy(synchroniser); }}; @Test public void testConcurrencyWithJMock() { |
рдпрд╣рд╛рдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдо рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреАрд╕рд░реЗ рдореЗрдВ рд╣рдо рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ 17 рд╡реАрдВ рдореЗрдВ рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
рд░рд╛рдЬреНрдп рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
EasyMock
рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдЖрдк рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди
makeThreadSafe(mock, false)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ
рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ
рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ checkIsUsedInOneThread(mock, true)
рдХрд╣рдХрд░
рдПрдХ рдзрд╛рдЧреЗ рд╕реЗ рдирдХрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдореЙрдХрд┐рдВрдЧ рдХреНрд▓рд╛рд╕реЗрд╕
рдХрднреА-рдХрднреА рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдбреЗрд╡рд▓рдкрд░, рдЬрд┐рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдирдХрд▓реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдиреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдЧрд░ рдпрд╣ рд╡рд░реНрдЧ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреЛрдИ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рдордЬрд╛рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
JMock
1 2 3 4 5 6 7 8 | private Mockery context = new JUnit4Mockery() {{ this.setImposteriser(ClassImposteriser.INSTANCE); }}; @Test public void testClassMockingWithJMock() { |
рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдкрд░
setImposteriser
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкрд░ рд╣реЛрддрд╛ рд╣реИред
EasyMock
1 2 3 4 5 6 | import static org.easymock.classextension.EasyMock.*; @Test public void testClassMockingWithEasyMock() { |
рдпрд╣ рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдиреНрдп рдорд╛рд╡реЗрди рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд▓рд╛рд╕реЗрдХреНрд╕реНрдЯреЗрдВрд╢рди рд╕реЗ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдореЛрдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдВрд╢рд┐рдХ рдЙрдкрд╣рд╛рд╕
рдлрд┐рд░ рднреА рдХрднреА-рдХрднреА рдпрд╣ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдореЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рдХреА рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛ред
JMock: рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ
EasyMock
1 2 3 4 5 6 7 | @Test public void testPartialMockingWithEasyMock() { |
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рд╕рднреА рдЧреИрд░-рдирдХрд▓реА рддрд░реАрдХреЛрдВ рдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рддреБрд▓рдирд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рддрдХ рдкрдврд╝ рдЪреБрдХреЗ рд╕рднреА рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрдзрд┐рдЧреНрд░рд╣реАрдд рдХреМрд╢рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХрдИ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред
рд╢рд╛рдпрдж рдкрд╛рдардХ рдореБрдЭрд╕реЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЗ рдЬрд╡рд╛рдм рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ "рдореБрдЭреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?" JMock рдпрд╛ EasyMock? " рдпрд╣рд╛рдБ рдЙрддреНрддрд░ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: тАЬрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред "
рд╡рд╣ рд╕рдм рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓реЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ!