Testdrevet javautvikling på objektorienterte skinner

773 views

Published on

Published in: Technology, Sports
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
773
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • A
  • A -> T
  • T
  • T
  • T
  • T
  • A
  • T
  • T Eiappserveren
  • A
  • A & T
  • A
  • T
  • A
  • T
  • A
  • T
  • T
  • A
  • A
  • T
  • T
  • A
  • A
  • A
  • A
  • T
  • T
  • A
  • AVis app med 2 forhåndsinnlagterequestsSteng den eneVis kjøring av tester (påpek Jetty)Endre controllerVis kjøring med plugin (JUnitMax og Infinitest)Vis applikasjon med å legge innVis at close ikke fungererFiks closeKjør grønt
  • T
  • T
  • T
  • T
  • T
  • T -> A
  • A
  • A
  • A
  • A
  • T
  • A
  • A & T
  • T
  • A
  • Testdrevet javautvikling på objektorienterte skinner

    1. 1. testdrevet javautviklingpå objektorienterte skinner Anders Sveen og Truls Jørgensen JavaZoneX
    2. 2. Java er ikke morsomt eller sexy
    3. 3. Java7 er ikke morsomt eller sexy
    4. 4. hva du gjør er viktigere
    5. 5. rask oppstart kjapp feedback mindre kompleksitetlett å integrere med tester
    6. 6. lite påtrengende enkelt å utvideenkelt å gå rundt open source
    7. 7. en følelse av å væreproduktiv
    8. 8. enkelt å legge til nye features
    9. 9. endringsdyktigobjektorientert kode
    10. 10. isolasjonansvarsdeling
    11. 11. if (soknad.getStatus().equals(VENTER)) { soknad.setGodkjentDato(new Date()); soknad.setStatus(GODKJENT);} VSif (soknad.kanGodkjennes()) { soknad.godkjenn();}
    12. 12. @Testpublic skalTesteGodkjenning() {}
    13. 13. @Testpublic skalTesteGodkjenning() { PersonRepository personRepo = mock(PersonRepository.class); when(personRepo) .getPerson(any(Long)) .returnValue(TestDataProvider .standardPerson().build());}
    14. 14. @Testpublic skalTesteGodkjenning() { PersonRepository personRepo = mock(PersonRepository.class); when(personRepo) .getPerson(any(Long)) .returnValue(TestDataProvider .standardPerson().build()); SoknadService service = new SoknadServiceImpl(personRepo); Soknad soknad = TestDataProvider .standardSoknad() .status(GODKJENT).build();}
    15. 15. @Testpublic skalTesteGodkjenning() { PersonRepository personRepo = mock(PersonRepository.class); when(personRepo) .getPerson(any(Long)) .returnValue(TestDataProvider .standardPerson().build()); SoknadService service = new SoknadServiceImpl(personRepo); Soknad soknad = TestDataProvider .standardSoknad() .status(GODKJENT).build(); assertFalse(service.godkjennSoknad(soknad));}
    16. 16. @Testpublic void skalTesteGodkjenning() { Soknad soknad = TestDataProvider .standardSoknad() .godkjent().build(); assertFalse(soknad.kanGodkjennes());}
    17. 17. public class OrganizationNumber { @NotBlank @Digits(integer=9, fraction=0) @Min(value=100000000) @ValidOrganizationNumber private String value;}@Validprivate OrganizationNumber organizationNumber;
    18. 18. public class OrganizationNumber { @NotBlank @Digits(integer=9, fraction=0) @Min(value=100000000) @ValidOrganizationNumber private String value;}@Valid@NotNull(groups=GodkjennSoknadContext.class)private OrganizationNumber organizationNumber;
    19. 19. @RequestMapping(method =RequestMethod.POST)public String registerOrganization( @Valid @ModelAttribute Organization organization, Errors errors) { ...}
    20. 20. trygghet til å gjøre endringer
    21. 21. lettå skrive tester
    22. 22. Organization org = OrganizationTestDataProvider .defaultOrganization();
    23. 23. Organization org = OrganizationTestDataProvider .defaultOrganization() .name(”¤Invalid") .build();
    24. 24. Organization org = OrganizationTestDataProvider .defaultOrganization() .withoutEmployees() .build();
    25. 25. Organization org = OrganizationTestDataProvider .defaultOrganization () .withoutEmployees() .build(entityManager);
    26. 26. @RequestMapping(method = RequestMethod.POST)public String registerRequestInformation( @Valid @ModelAttribute InformationRequest informationRequest, Errors errors) {}
    27. 27. @RequestMapping(method = RequestMethod.POST)public String registerRequestInformation( @Valid @ModelAttribute InformationRequest informationRequest, Errors errors) { this.orgRepo .addInformationRequest(informationRequest);}
    28. 28. @RequestMapping(method = RequestMethod.POST)public String registerRequestInformation( @Valid @ModelAttribute InformationRequest informationRequest, Errors errors) { if (errors.hasErrors()) { return VIEW_INFORMATION_REQUEST_FORM; } this.orgRepo .addInformationRequest(informationRequest);}
    29. 29. @RequestMapping(method = RequestMethod.POST)public String registerRequestInformation( @Valid @ModelAttribute InformationRequest informationRequest, Errors errors) { if (errors.hasErrors()) { return VIEW_INFORMATION_REQUEST_FORM; } this.orgRepo .addInformationRequest(informationRequest); return redirectTo(URL_INFORMATION_REQUEST);}
    30. 30. @RequestMapping(method = RequestMethod.GET, value = ”ir/{requestId}/received”)public String registerRequestAsReceived( @PathVariable Long requestId ) { InformationRequest informationRequest = this.orgRepo .getInformationRequest( requestId ); informationRequest.received(); return redirectTo( url("/", URL_INFORMATION_REQUEST));}
    31. 31. @RequestMapping(method = RequestMethod.GET, value = ”ir/{requestId}/received”)public @ResponseBody InformationRequest registerRequestAsReceived( @PathVariable Long requestId) { InformationRequest informationRequest = this.orgRepo .getInformationRequest(requestId); return informationRequest;}
    32. 32. oppsummert:
    33. 33. github.com/anderssv/jzx-weboo
    34. 34. Testdata builders http://nat.truemesh.com/archives/000714.htmlObject mother http://martinfowler.com/bliki/ObjectMother.htmlJetty embedded http://docs.codehaus.org/display/JETTY/Embedding+JettyJSR 303 http://jcp.org/en/jsr/detail?id=303Spring MVC http://static.springsource.org/spring/docs/3.0.x/spring- framework-reference/html/mvc.html
    35. 35. 14.-15. novemberRadisson Blu Plaza, Oslohttp://smidig2011.no

    ×