рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ
рдЗрд╕ рд░рд╛рдп рдореЗрдВ рдЖрдпрд╛ рд╣реИ: рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рд╡реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдореБрдЭреЗ рдпрд╣ рдзрд╛рд░рдгрд╛ рдорд┐рд▓реА рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреБрдЪреНрдЫ
* рднреАред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рдЖрд╡реЗрджрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдмрд╕ рдпрд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред
*) рд╕реНрд╡рдпрдВ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИред рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдмрдирд╛рдирд╛ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдореИрдВ рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрддрд╡рд╛рджреА рдирд╣реАрдВ рд╣реВрдБ, рдореИрдВ рдПрдХ рдЕрднреНрдпрд╛рд╕реА рд╣реВрдБ ("рдореИрдВ рд╕реНрд╡рднрд╛рд╡ рд╕реЗ рдкреБрд╢реНрдХрд┐рди рдирд╣реАрдВ рд╣реВрдБ, рдореИрдВ рдмреЗрд▓рд┐рдВрд╕реНрдХреА рд╣реВрдБ" ┬й)ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЯреЗрд╕реНрдЯ рдбреНрд░рд┐рд╡реЗрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ, рдбреЗрдЯрд╛ рдбреНрд░рд┐рд╡реЗрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ, рдмрд┐рд╣реЗрд╡рд┐рдпрд░ рдбреНрд░рд┐рд╡реЗрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рдард╣рд░рд╛ рд╕рдХрддрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореЗрд░рд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛: "рдпрд╣ рдЖрд╕рд╛рди рд╣реИ," рдпрд╛ "рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред" рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдореЗрд░реЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рдПрдХ рд╣реА, рдореЗрд░реЗ рддрд░реНрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕ рдкрд╛рда рдХреЛ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдиреЗрдВред
рддреЛ, рдбреНрд░рдо рд░реЛрд▓:
рдкрд░рд┐рд╖реНрдХреГрдд рдЖрд╡реЗрджрди
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ред рд╕реНрдХреЛрдк - PaaS, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рдП-рдП-рд╕рд░реНрд╡рд┐рд╕ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рдиред рдмрдбрд╝реЗ рдЙрджреНрдпрдореЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛рдлреА рдорд╛рдирдХ рд╣реИ: рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рдКрдкрд░, рдлрд┐рд░ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕, рд╕рдм рдХреБрдЫ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рджреЛ Pribluda рд╣реИрдВ: рдПрдХ рд╣реА рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЯреБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпреЗ рдЯреБрдХрдбрд╝реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред рднрд╛рд╖рд╛ рдЬрд╛рд╡рд╛, рд╕реНрдХреИрд▓рд╛ рдХреЗ рд╕рд╛рде рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИред
рд╡рд╕рдВрдд рдФрд░ рдкрд░реАрдХреНрд╖рдгред рдореЙрдХ рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
рд╡рд╕рдВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред тАЬрдПрдХ рдЦрд░рдЧреЛрд╢ рд╡рд╣ рд╣реИ рдЬреЛ рдПрдХ рдЫреЗрдж рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдиреЛрд░рд╛ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЦрд░рдЧреЛрд╢ рд░рд╣рддрд╛ рд╣реИ тАЭ┬й
рдЗрдВрдЯрд░рдлреЗрд╕:
public interface DeploymentService { Deployment deploy(Application application, DeploymentDescription deploymentDescription); }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
@Service public class DeploymentServiceImpl implements DeploymentService { private DeploymentRepository deploymentRepository; private DeploymentMaker deploymentMaker; private VirtualInfrastructureService virtualInfrastructureService; @Autowired public DeploymentServiceImpl(DeploymentRepository deploymentRepository, DeploymentMaker deploymentMaker, VirtualInfrastructureService virtualInfrastructureService) { this.deploymentRepository = deploymentRepository; this.deploymentMaker = deploymentMaker; this.virtualInfrastructureService = virtualInfrastructureService; } public Deployment deploy(Application application, DeploymentDescription deploymentDescription) {
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо JMock рдореЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдереЗ рдореЗрдВ Dep рддреИрдирд╛рддреАService.deploy () рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ
public class DeploymentServiceMockTest extends MockObjectTestCase { private DeploymentRepository deploymentRepository = mock(DeploymentRepository.class); private DeploymentMaker deploymentMaker = mock(DeploymentMaker.class); private VirtualInfrastructureService virtualInfrastructureService = mock(VirtualInfrastructureService.class); private DeploymentServiceImpl deploymentService; public void setUp() { deploymentService = new DeploymentServiceImpl(deploymentRepository, deploymentMaker, virtualInfrastructureService); } public void testSuccessfulDeploymentSavedAndVMsLaunched() { final Application app = makeValidApplication(); final DeploymentDescription dd = makeValidDeploymentDescription(); final Deployment deployment = helperMethodToCreateDeployment(); checking(new Expectations(){{ one(deploymentMaker).makeDeployment(app, dd);will(returnValue(deployment)); one(deploymentRepository).save(deployment); one(virtualInfrastructureService).launchVirtualMachines(deployment.getVirtualMachineDescriptors()); }}); deploymentService.deploy(application, deploymentDescription); } public void testExceptionIsTranslated() { final Application app = makeValidApplication(); final DeploymentDescription dd = makeValidDeploymentDescription(); final Deployment deployment = helperMethodToCreateDeployment(); checking(new Expectations(){{ one(deploymentMaker).makeDeployment(app, dd);will(returnValue(deployment)); one(deploymentRepository).save(deployment); one(virtualInfrastructureService).launchVirtualMachines(deployment.getVirtualMachineDescriptors());will(throwException(new VirtualInfrastructureException("error message"))); }}); ` try { deploymentService.deploy(application, deploymentDescription); fail("Expected DeploymentUnsuccsessfullException!"); } catch (DeploymentUnsuccsessfullException e) {
рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЙрдХ рдЯреЗрд╕реНрдЯ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг () рд╡рд┐рдзрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдореЗрдХрд░.makeDeployment () рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗрд╡рд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореБрдЭреЗ рдЙрди рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдереА рдЬреЛ рдореЗрдХрдЕрдк рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рддреИрдирд╛рддреА () рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдореЗрдВ рдореЗрдХрдбрд╛рдИрдкрд░реЗрд╢рди () рд▓реЙрдЬрд┐рдХ рдирд┐рдХрд╛рд▓рд╛ред рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рддреИрдирд╛рддреА рд╡рд╕реНрддреБрдПрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдХрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╡реИрд╕реЗ, JMock рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рднреА рдореЛрдХреА рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, setIpostorizer (ClassImpostorizer.INSTANCE) рдХреЛ setUp () рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдирдХрд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реИред
рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ:
рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдкрд░реАрдХреНрд╖рдг
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛, рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдирд╕реЗ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, "рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред" рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рдлрд╝ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдорджрдж рд╕реЗ рд╣рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдореИрдкрд┐рдВрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреНрдпрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ Dep рддреИрдирд╛рддреАService.deploy () рдЪрд▓рд╛рдПрдБ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИрдВред
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд░реЛрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╣рдореЗрдВ рдХрдИ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрдИ рд▓реЗрдирджреЗрди рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣рд╛рдЗрдкрд░рд╕реЛрдирд┐рдХ - рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдПрдХ SQL- рд╕рдВрдЧрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░реАрдХреНрд╖рдг рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ PostgreSQL рдпрд╛ MySQL рдХреЗ рдмрдЬрд╛рдп рд╣рд╛рдЗрдкрд░рд╕реЛрдирд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдкрдж рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИрдВ; рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВред
рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣рдорд╛рд░реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ
ORMUnit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛
рдХреЛ рдлрд┐рд░ рд╕реЗ
рдмрдирд╛рддрд╛ рд╣реИ ред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛрдиреЗ рддрдХ рдкреБрд░рд╛рдиреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рд╛рдЗрдкрд░рд╕реЛрдирд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реЛрддрд╛ рд╣реИред рд╕рдЪ, рд╕рдЪ!
public class DeploymentRepositoryTest extends HibernatePersistenceTest { @Autorwired private DeploymentRepository deploymentRepository; public void testSaveAndLoad() { Deployment deployment = DeploymentMother.makeSimpleDeployment(); deploymentRepository.add(deployment); Deployment loadedDeployment = deploymentRepository.getById(deployment.getId()); assertDeploymentEquals(deployment, loadedDeployment); } private void assertDeploymentEquals(Deployment expected, Deployment actual) {
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╣рдордиреЗ рд╣реЗрд▓реНрдкрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдкрджрдирд╛рдореЛрдВ рдХреЛ рдЕрдкрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╕рдВрд╕реНрдерд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдРрд╕реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: makeSimpleDeployment (), makeMutliVmDeploymentWithMasterSlaveReplication (), makeFailedDeployment (), makeStartedDeploymentWithFailedVM (), рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЧрд░реАрдмреЛрдВ рдХреЗ рд▓рд┐рдП DDD рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдпрдорд░рд▓ рдпрд╛ рдПрдХреНрд╕рдПрдордПрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реА рдХрд╛рд░рдг рдХрд┐ рдореИрдВ рдЧреНрд░реВрд╡реА рдХреЗ рдмрдЬрд╛рдп рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ - рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЯрд╛рдЗрдк рдХрд░рдирд╛ред рдпрджрд┐ рдореИрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рддрд╛ рд╣реВрдВ (рдФрд░ рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ, рддреЛ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдПрдХ рдЦрддрд░рдирд╛рдХ рд╡рд┐рдХреГрддрд┐ рд╕реЗ рдПрдХ рд╕реБрдЦрдж рдЕрдиреБрднрд╡ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ), рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рддреБрд░рдВрдд рдореБрдЭреЗ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛрдВрдЧреА рдФрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдордЬрд╝реЗрджрд╛рд░ рднрд╛рдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдкреБрд╕реНрддрдХрд╛рд▓рдп
Arid pojos (
ORMUnit рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд▓реЗрдЦрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛрдб рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рднреА рддреИрдирд╛рддреА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ) рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореИрдкрд┐рдВрдЧ рдореЗрдВ findDeploymentsReadyToLaunch рдирд╛рдордХ рдПрдХ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ, рдФрд░ рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ <Deployment> findDloymentsReadyToLaunch () рд╡рд┐рдзрд┐ рдкрд░рд┐рдирд┐рдпреЛрдЬрдирд░рдЪрдирд╛рддреНрдордХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВред рдФрд░ рдпрд╣ рд╕рдм, рдЬрдм рд╢реБрд╖реНрдХ-рдкреЙрдЬреЛрд╕ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╕реЗ, рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред Dep рддреИрдирд╛рддреАRepositoryTest рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public void testRetrieveReadyToLaunch() { for (int i=0; i<5; i++) { deploymentRepository.add(DeploymentMother.makeReadyToLaunchDeployment()); } deploymentRepository.add(DeploymentMother.makeNewDeployment()); List<Deployment> result = deploymentRepository.findDeploymentsReadyToLaunch(); assertEquals(5, result.size()); for (Deployment d : result) { assertTrue(deployment.isReadyToLaunch()); }
рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░: рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ
рдореВрд▓ рд░реВрдк рд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╣рд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд░рд╛рджрд╛-рдЦреБрд▓рд╛рд╕рд╛ рд╡рд┐рдзрд┐ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд рдЗрд░рд╛рджреЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреАрдбреАрдбреА рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рджреЗрдирд╛ рд╣реИред TestRetrieveReadyToLaunch рдирд╣реАрдВ, рд▓реЗрдХрд┐рди testOnlyReadyToLaunchDeploymentsRetrievedред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛрд░ (5, result.size ()) - рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрдкрдиреЗ TestUtils (рдЖрдк TestUtils, рд╕рд╣реА рд╣реИ!) рдореЗрдВ рдПрдХ рдореБрдЦрд░ (int рдЕрдкреЗрдХреНрд╖рд┐рдд, рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣) рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ:
TestUtils рдореЗрдВ:
public static void T assertCollection(int expectedSize, ElementAsserter<T> asserter, Collection<T> actual) { assertSize(expectedSize, actual.size()); for (T element : actual) { asserter.assertElement(element); } } public static abstract class ElementAsserter<T> { public void assertElement(T element) { if (!checkElement(element)) fail(getFailureDescription(element)); } protected abstract boolean checkElement(T element);
рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
ElementAsserter readyToLaunch = new ElementAsserter<Deployment>() { protected boolean checkElement(Deployment d) { return d.isReadyToLaunch(); } protected String getFailureDescription(Deployment d) { return String.format("Deployment with id %d and name %s is NOT ready to be launched!"); } } private void assertAllReadyToLaunch(int expectedSize, List<Deployment> deployments) { TestUtils.assertCollection(expectedSize, a, deployments); } public void testOnlyReadyToLaunchDeploymentsRetrieved() { for (int i=0; i<5; i++) { deploymentRepository.add(DeploymentMother.makeReadyToLaunchDeployment()); } deploymentRepository.add(DeploymentMother.makeNewDeployment()); assertAllReadyToLaunch(5, deploymentRepository.findDeploymentsReadyToLaunch()); }
рдЖрдк рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рдВрдЪ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рднреА рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПред рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ? рдФрд░ рдлрд┐рд░, рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рдирдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рд╕реЗ рдХреЛрдИ рдмрд╣рд╛рдирд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддреЛ рдХреЛрдб рдХреА рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ (рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ), рддреЛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрддреБрд▓рдиреАрдп рдЖрдирдВрдж рджреЗрддреА рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рд╕реАрдзреЗ рд▓рд╛рдЗрд╡ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдФрд░ рдлрд┐рд░?
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдпрджрд┐ рд╣рдмреНрд░рд▓реАрд▓реНрдпреВрдбрд╛ рд░реБрдЪрд┐ рдХрд╛ рд╣реИ, рддреЛ рдПрдХ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдЕрдЧрд▓реА рдХрдбрд╝реА рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рд╣рдорд╛рд░реЗ) рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред "рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред