Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Tests d’Intégration
Nicolas Fränkel Février 2015
2https://leanpub.com/integrationtest
Me, myself and I
Developer & Architect as consultant
Wide range of businesses & custo...
3https://leanpub.com/integrationtest
Also an author
4https://leanpub.com/integrationtest
Plan
Integration Testing
What is that?
Challenges
Solution hints
Testing with resourc...
Basics
6https://leanpub.com/integrationtest
There are many different kinds of testing
Unit Testing
Mutation Testing
GUI Testing
P...
7https://leanpub.com/integrationtest
Unit Testing vs. Integration Testing
Unit Testing
Testing a unit in isolation
Integra...
8https://leanpub.com/integrationtest
A concrete example
Let’s take an example
A prototype car
"2011NissanLeafWAS20111040"b...
9https://leanpub.com/integrationtest
Unit Testing
Akin to testing each nut
and bolt separately
10https://leanpub.com/integrationtest
Integration Testing
Akin to going on a test
drive
"URE05e"byMarvinRaaijmakers-Ownwor...
11https://leanpub.com/integrationtest
Unit Testing + Integration Testing
Approaches are not
exclusive but
complementary
Wo...
12https://leanpub.com/integrationtest
System Under Test
The SUT is what get
tested
Techniques from Unit
Testing can be re-...
13https://leanpub.com/integrationtest
Testing is about ROI
The larger the SUT
The more fragile the test
The less maintaina...
14https://leanpub.com/integrationtest
Integration Testing Challenges
Brittle
Dependent on external
resources
 Database(s)...
15https://leanpub.com/integrationtest
How to cope
Separate Integration
Tests from Unit Tests
Fake required
infrastructure ...
16https://leanpub.com/integrationtest
But IT are still slow?!
Separating UT & IT
doesn’t make IT run
faster
But you can un...
17https://leanpub.com/integrationtest
Integration Testing and build
Available tools
Ant
Maven
Gradle
etc.
NewDevelopmentRe...
18https://leanpub.com/integrationtest
Maven lifecycle
…
compile
…
test
…
pre-integration-test
integration-test
post-integr...
19https://leanpub.com/integrationtest
Reminder on Surefire
Bound to the test phase
Runs by default
*Test
Test*
*TestCase
20https://leanpub.com/integrationtest
Failsafe
“Copy” of Surefire
Different defaults
*IT
IT*
*ITCase
One goal per lifecycl...
21https://leanpub.com/integrationtest
Binding Failsafe - sample
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<v...
22https://leanpub.com/integrationtest
Continuous Integration
Needs a build configured
Suggestions
Unit Tests run at each c...
Infrastructure dependencies
24https://leanpub.com/integrationtest
Infrastructure dependencies
Database
Filesystem
Time
Message Oriented
Middleware
Mai...
25https://leanpub.com/integrationtest
Mocks and infrastructure dependencies
To test your Service
Mock your DAO/repository
...
26https://leanpub.com/integrationtest
Simple database use-case
Oracle database
Use an in-memory datasource
and hope for th...
27https://leanpub.com/integrationtest
Reducing database gap risk
In-memory databases are easy to
setup
h2 is such a databa...
28https://leanpub.com/integrationtest
Integration Testing with Web Services
Web Services also are an
infrastructure resour...
29https://leanpub.com/integrationtest
Faking RESTful WS
Require an HTTP server
Requirements
Easy setup
Standalone
Embeddab...
30https://leanpub.com/integrationtest
Spark to the rescue
Micro web framework
A la Sinatra
http://www.sparkjava.com/
Very ...
31https://leanpub.com/integrationtest
Spark sample
import static spark.Spark.*;
import spark.*;
public class SparkSample{
...
32https://leanpub.com/integrationtest
Faking SOAP web service
Possible to use Spark for SOAP
But unwieldy
33https://leanpub.com/integrationtest
SOAPUI
SOAPUI is the framework to test SOAP WS
Has a GUI
Good documentation
Understa...
34https://leanpub.com/integrationtest
SOAPUI usage
Get WSDL
Either online
Or from a file
Create MockService
Craft the adeq...
35https://leanpub.com/integrationtest
Challenges to the previous scenario
Craft the adequate response?
More likely get one...
36https://leanpub.com/integrationtest
SOAPUI automation
WsdlProject project = new WsdlProject();
String wsdlFile = "file:s...
37https://leanpub.com/integrationtest
Faking Web Service in real-life
Use the same rules as for UT
Keep validation simple
...
In-container Testing
39https://leanpub.com/integrationtest
Upping the ante
Testing collaboration is nice
Faking infrastructure dependencies is ...
40https://leanpub.com/integrationtest
The container!
“Proprietary” container
Spring
Application Server
Tomcat
JBoss
<Place...
41https://leanpub.com/integrationtest
Spring
So far, we can test:
Beans which dependencies can be mocked (or not)
 Servic...
42https://leanpub.com/integrationtest
Testing configuration
Configuration cannot be monolithic
Break down into fragments
E...
43https://leanpub.com/integrationtest
Data source configuration fragment management example
Different configuration
fragme...
44https://leanpub.com/integrationtest
Data source configuration sample
<beans ...>
<jee:jndi-lookup id="ds" jndi-name="jdb...
45https://leanpub.com/integrationtest
Fragment structure
1. Main fragment
Repository
Service
etc.
2. Prod DB fragment
3. T...
46https://leanpub.com/integrationtest
Tips
Prevent coupling
No fragments reference in fragments
Use top-level assembly ins...
47https://leanpub.com/integrationtest
And now, how to test?
Get access to both
The entry point
The “end” point
Spring Test...
48https://leanpub.com/integrationtest
Favor TestNG
Extra grouping
Per layer
Per use-case
Name your own
Extra lifecycle hoo...
49https://leanpub.com/integrationtest
Spring TestNG integration
AbstractTestNGSpringContextTests
AbstractTransactionalTest...
50https://leanpub.com/integrationtest
Sample TestNG test with Spring
@ContextConfiguration(
classes = { MainCfg.class, Ano...
51https://leanpub.com/integrationtest
Testing with the DB (or other transactional resources)
Transactions
Bound to busines...
52https://leanpub.com/integrationtest
Transaction management tip
Tests fail… sometimes
How to audit state?
By default, Spr...
53https://leanpub.com/integrationtest
Sample Transaction management
@ContextConfiguration
@TransactionConfiguration(defaul...
54https://leanpub.com/integrationtest
Spring MVC webapps Testing
Require a context hierachy
Parent as main context
Child a...
55https://leanpub.com/integrationtest
Spring MVC test sample
@WebAppConfiguration
@ContextHierarchy({
@ContextConfiguratio...
56https://leanpub.com/integrationtest
Tools for testing webapps
HTML testing tools
Interact with HTML/CSS
 Fill this fiel...
57https://leanpub.com/integrationtest
Drawback of previous approaches
Very low-level
Fragile!
Remember that testing is
abo...
58https://leanpub.com/integrationtest
Drawback of Testing with controllers as entry point
Bypass many URL-
related feature...
59https://leanpub.com/integrationtest
Spring Test to the rescue
Spring Test has a large
chunk dedicated to MVC
Since 3.2
C...
60https://leanpub.com/integrationtest
Spring MVC Test overview
61https://leanpub.com/integrationtest
MockMvc class responsibilities
Request builder
Configures the Fake request
Request m...
62https://leanpub.com/integrationtest
Available configuration on Request Builder
HTTP method
GET
POST
etc.
HTTP related st...
63https://leanpub.com/integrationtest
Request Builder sample
MockHttpServletRequestBuilder builder =
get("/customer/{id}",...
64https://leanpub.com/integrationtest
Some matchers
Checks result is a
Forward
 Either exact
 Or regexp
Redirect
 Eithe...
65https://leanpub.com/integrationtest
Some other matchers
Request class
Handler class
Controller
Content class
Cookie clas...
66https://leanpub.com/integrationtest
The JavaEE world
JavaEE has unique
challenges
CDI has no explicit wiring
 You can @...
67https://leanpub.com/integrationtest
Deploy only what you want
Standalone API to deploy
only resources relevant
to the te...
68https://leanpub.com/integrationtest
Shrinkwrap sample
String srcMainWebapp = "src/main/webapp/";
ShrinkWrap.create(WebAr...
69https://leanpub.com/integrationtest
Maven integration sample
File[] libs = Maven.resolver()
.loadPomFromFile("pom.xml")
...
70https://leanpub.com/integrationtest
Different application servers
Abstraction layer to
Download
Deploy applications
Test...
71https://leanpub.com/integrationtest
Arquillian Test sample
public class ArquillianSampleIT extends Arquillian {
@Inject
...
72https://leanpub.com/integrationtest
Arquillian configuration sample
<arquillian xmlns="http://jboss.org/schema/arquillia...
https://leanpub.com/integrationtest
Twitter: @itfromtrenches
Upcoming SlideShare
Loading in …5
×

201502 - Integration Testing

687 views

Published on

Vous avez atteint le Graal de 100% de Code Coverage ? Bravo ! Pourtant, vous rencontrez encore des bugs lors du lancement de l'application. Vous pratiquez déjà les Tests d'Intégration ? Bravo également ! Pourtant, vous devez les corriger sans cesse car ils sont instables.

Dans cette présentation, je tenterai de démontrer la raison d'être des Tests d'Intégration et leur complémentarité avec les Tests Unitaires. Je montrerai également comment améliorer la fiabilité des TI et quels sont les outils pour cela. Le reste de la présentation sera consacré aux TI in-container, Spring et Java EE.

Published in: Software
  • D0WNL0AD FULL ▶ ▶ ▶ ▶ http://1lite.top/rM2NP ◀ ◀ ◀ ◀
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • From A Cup To c Cup In 6 Weeks with this... ➣➣➣ https://t.cn/A6Li7eze
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • D0WNL0AD FULL ▶ ▶ ▶ ▶ http://1lite.top/rM2NP ◀ ◀ ◀ ◀
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • My daughter struggled with Maths due to an absence of teachers during year 10. I purchased Jeevan's 'home-tutor' program and she has not looked back. Not only does it explain the basic steps but also how to achieve those top grades. This is not only far better than a private tutor but amazing value for money. I would only have got a few hours of a tutors time for the same money. I am very grateful as this has turned my daughters attitude to Maths around- she now loves it and finds it easy! My other daughter, who is currently 14-years-old, has already begun your program. After going through your book and DVD's, she has moved up to the top set in maths. I have no doubt when she takes her GCSE maths in 2 years, she will achieve an A/A* grade! Many many thanks for your help Jeevan! ♥♥♥ https://bit.ly/33W8jmf
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

201502 - Integration Testing

  1. 1. Tests d’Intégration Nicolas Fränkel Février 2015
  2. 2. 2https://leanpub.com/integrationtest Me, myself and I Developer & Architect as consultant Wide range of businesses & customers Teacher & Trainer Speaker Blogger http://blog.frankel.ch/ http://morevaadin.com/
  3. 3. 3https://leanpub.com/integrationtest Also an author
  4. 4. 4https://leanpub.com/integrationtest Plan Integration Testing What is that? Challenges Solution hints Testing with resource dependencies Database Web Services Testing In-container Spring & Spring MVC JavaEE
  5. 5. Basics
  6. 6. 6https://leanpub.com/integrationtest There are many different kinds of testing Unit Testing Mutation Testing GUI Testing Performance Testing Load Testing Stress Testing Endurance Testing Security Testing etc.
  7. 7. 7https://leanpub.com/integrationtest Unit Testing vs. Integration Testing Unit Testing Testing a unit in isolation Integration Testing Testing the collaboration of multiple units "Savatefouettéfigure1"byDaniel-PhotoDaniel.
  8. 8. 8https://leanpub.com/integrationtest A concrete example Let’s take an example A prototype car "2011NissanLeafWAS20111040"byMariordoMarioRobertoDuranOrtiz-Ownwork
  9. 9. 9https://leanpub.com/integrationtest Unit Testing Akin to testing each nut and bolt separately
  10. 10. 10https://leanpub.com/integrationtest Integration Testing Akin to going on a test drive "URE05e"byMarvinRaaijmakers-Ownwork.
  11. 11. 11https://leanpub.com/integrationtest Unit Testing + Integration Testing Approaches are not exclusive but complementary Would you take a prototype car on test drive without having tested only nuts and bolts? Would you manufacture a car from a prototype having only tested nuts and bolts but without having tested it on numerous test drives?
  12. 12. 12https://leanpub.com/integrationtest System Under Test The SUT is what get tested Techniques from Unit Testing can be re-used Dependency Injection Test doubles
  13. 13. 13https://leanpub.com/integrationtest Testing is about ROI The larger the SUT The more fragile the test The less maintainable the test The less the ROI Thus, tests have to be organized in a pyramidal way The bigger the SUT The less the number of tests Integration Testing Test standard cases Generally not error cases http://martinfowler.com/bliki/TestPyramid.html
  14. 14. 14https://leanpub.com/integrationtest Integration Testing Challenges Brittle Dependent on external resources  Database(s)  etc. Slow Dependent on external resources Hard to diagnose
  15. 15. 15https://leanpub.com/integrationtest How to cope Separate Integration Tests from Unit Tests Fake required infrastructure resources Test in-container
  16. 16. 16https://leanpub.com/integrationtest But IT are still slow?! Separating UT & IT doesn’t make IT run faster But you can uncover errors from UT faster Fail Fast It will speed testing "Gepardjagt2(Acinonyxjubatus)"byMaleneThyssen-Ownwork.
  17. 17. 17https://leanpub.com/integrationtest Integration Testing and build Available tools Ant Maven Gradle etc. NewDevelopmentRecentlyFinishedonBristol'sCityCentrebyBrizzleboy
  18. 18. 18https://leanpub.com/integrationtest Maven lifecycle … compile … test … pre-integration-test integration-test post-integration-test verify …
  19. 19. 19https://leanpub.com/integrationtest Reminder on Surefire Bound to the test phase Runs by default *Test Test* *TestCase
  20. 20. 20https://leanpub.com/integrationtest Failsafe “Copy” of Surefire Different defaults *IT IT* *ITCase One goal per lifecycle phase pre-integration-test integration-test post-integration-test verify Must be bound explicitly
  21. 21. 21https://leanpub.com/integrationtest Binding Failsafe - sample <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.17</version> <executions> <execution> <id>integration-test</id> <goals> <goal>integration-test</goal> </goals> <phase>integration-test</phase> </execution> <execution> <id>verify</id> <goals> <goal>verify</goal> </goals> <phase>verify</phase> </execution> </executions> </plugin>
  22. 22. 22https://leanpub.com/integrationtest Continuous Integration Needs a build configured Suggestions Unit Tests run at each commit Integration Tests run “regularly”  Daily  Hourly  Depending on the context
  23. 23. Infrastructure dependencies
  24. 24. 24https://leanpub.com/integrationtest Infrastructure dependencies Database Filesystem Time Message Oriented Middleware Mail server FTP server etc.
  25. 25. 25https://leanpub.com/integrationtest Mocks and infrastructure dependencies To test your Service Mock your DAO/repository  Mockito To test your DAO/repository Mock your database???
  26. 26. 26https://leanpub.com/integrationtest Simple database use-case Oracle database Use an in-memory datasource and hope for the best Use Oracle Express and hope for the best Use a dedicated remote schema for each developer  And your DBAs will hate you
  27. 27. 27https://leanpub.com/integrationtest Reducing database gap risk In-memory databases are easy to setup h2 is such a database (successor of HSQL) Compatibility modes for most widespread DB  jdbc:h2:mem:test;MODE=Oracle
  28. 28. 28https://leanpub.com/integrationtest Integration Testing with Web Services Web Services also are an infrastructure resource Hosted on-site Or outside Different Web Services types have different solutions RESTful SOAP
  29. 29. 29https://leanpub.com/integrationtest Faking RESTful WS Require an HTTP server Requirements Easy setup Standalone Embeddable in tests Spring MVC? Requires a servlet container  (Not with Spring Boot) Some code to write Author:DwightSiplerfromStow,MA,USA
  30. 30. 30https://leanpub.com/integrationtest Spark to the rescue Micro web framework A la Sinatra http://www.sparkjava.com/ Very few lines of code Just wire to serve JSON files
  31. 31. 31https://leanpub.com/integrationtest Spark sample import static spark.Spark.*; import spark.*; public class SparkSample{ public static void main(String[] args) { setPort(5678); get("/hello", (request, response) -> { return "Hello World!"; }); get("/users/:name", (request, response) -> { return "User: " + request.params(":name"); }); get("/private", (request, response) -> { response.status(401); return "Go Away!!!"; }); } }
  32. 32. 32https://leanpub.com/integrationtest Faking SOAP web service Possible to use Spark for SOAP But unwieldy
  33. 33. 33https://leanpub.com/integrationtest SOAPUI SOAPUI is the framework to test SOAP WS Has a GUI Good documentation Understands  Authentication  Headers  Etc. Can be used to Fake SOAP WS
  34. 34. 34https://leanpub.com/integrationtest SOAPUI usage Get WSDL Either online Or from a file Create MockService Craft the adequate response Run the service Point the dependency to localhost
  35. 35. 35https://leanpub.com/integrationtest Challenges to the previous scenario Craft the adequate response? More likely get one from the real WS And tweak it Running in an automated way Save the project Get the SOAPUI jar Read the project and launch
  36. 36. 36https://leanpub.com/integrationtest SOAPUI automation WsdlProject project = new WsdlProject(); String wsdlFile = "file:src/test/resources/ip2geo.wsdl"; WsdlInterface wsdlInterface = importWsdl(project, wsdlFile, true)[0]; WsdlMockService fakeService = project.addNewMockService("fakeService"); WsdlOperation wsdlOp = wsdlInterface.getOperationByName("ResolveIP"); MockOperation fakeOp = fakeService.addNewMockOperation(wsdlOp); MockResponse fakeResponse = fakeOp.addNewMockResponse("fakeResponse"); fakeResponse.setResponseContent( "<soapenv:Envelope ...</soapenv:Envelope>"); runner = fakeService.start();
  37. 37. 37https://leanpub.com/integrationtest Faking Web Service in real-life Use the same rules as for UT Keep validation simple Test one thing  One Assert  Or a set of related ones Keep setup simple Don’t put complex logic  Don’t put too much logic  Don’t put logic at all Duplicate setup in each test  Up to a point Author:I,rolfB
  38. 38. In-container Testing
  39. 39. 39https://leanpub.com/integrationtest Upping the ante Testing collaboration is nice Faking infrastructure dependencies is nice But didn’t we forget the most important dependency?
  40. 40. 40https://leanpub.com/integrationtest The container! “Proprietary” container Spring Application Server Tomcat JBoss <Place your favorite one here>
  41. 41. 41https://leanpub.com/integrationtest Spring So far, we can test: Beans which dependencies can be mocked (or not)  Service Beans that depend on fake resources  Repository What about the configuration? In Unit Tests, we set dependencies  The real configuration is not used  Ergo, not tested!
  42. 42. 42https://leanpub.com/integrationtest Testing configuration Configuration cannot be monolithic Break down into fragments Each fragment contains a set of either  Real beans  Fake beans RudstonMonolithMay2013byAngelaFindlay
  43. 43. 43https://leanpub.com/integrationtest Data source configuration fragment management example Different configuration fragments Production JNDI fragment Test in-memory fragment
  44. 44. 44https://leanpub.com/integrationtest Data source configuration sample <beans ...> <jee:jndi-lookup id="ds" jndi-name="jdbc/MyDS" /> </beans> <beans ...> <bean id="ds" class="o.a.t.jdbc.pool.DataSource"> <property name="driverClassName” value="org.h2.Driver" /> <property name="url" value="jdbc:h2:~/test" /> <property name="username" value="sa" /> <property name="maxActive" value="1" /> </bean> </beans>
  45. 45. 45https://leanpub.com/integrationtest Fragment structure 1. Main fragment Repository Service etc. 2. Prod DB fragment 3. Test DB fragment
  46. 46. 46https://leanpub.com/integrationtest Tips Prevent coupling No fragments reference in fragments Use top-level assembly instead  Tests  Application Context  Webapps Pool exhaustion check Set the maximum number of connections in the pool to 1 Compile-time safety Use JavaConfig Not related to testing 
  47. 47. 47https://leanpub.com/integrationtest And now, how to test? Get access to both The entry point The “end” point Spring Test to the rescue Integration with common Testing frameworks  JUnit  TestNG StLouisGatewayArch1916"byDirkBeyer-Ownwork.
  48. 48. 48https://leanpub.com/integrationtest Favor TestNG Extra grouping Per layer Per use-case Name your own Extra lifecycle hooks Better parameterization Data Provider Ordering of test methods
  49. 49. 49https://leanpub.com/integrationtest Spring TestNG integration AbstractTestNGSpringContextTests AbstractTransactionalTestNGSpringContextTests Configurable context fragments @ContextConfiguration Inject any bean in the test class If necessary, applicatonContext member from superclass
  50. 50. 50https://leanpub.com/integrationtest Sample TestNG test with Spring @ContextConfiguration( classes = { MainCfg.class, AnotherCfg.class }) public class OrderIT extends AbstractTestNGSpringContextTests { @Autowired private OrderService orderService; @Test public void should_do_this_and_that() { orderService.order(); Assert.assertThat(...) } }
  51. 51. 51https://leanpub.com/integrationtest Testing with the DB (or other transactional resources) Transactions Bound to business functionality Implemented on Service layer With DAO Use explicit transaction management @Transactional
  52. 52. 52https://leanpub.com/integrationtest Transaction management tip Tests fail… sometimes How to audit state? By default, Spring rollbacks transactions General configuration @TransactionConfiguration( defaultRollback = false ) Can be overridden on a per- method basis  @Rollback(true)
  53. 53. 53https://leanpub.com/integrationtest Sample Transaction management @ContextConfiguration @TransactionConfiguration(defaultRollback = false) public class OverrideDefaultRollbackSpringTest extends AbstractTransactionalTestNGSpringContextTests { @Test @Rollback(true) public void transaction_will_be_rollbacked() { ... } @Test public void transaction_wont_be_rollbacked() { ... } }
  54. 54. 54https://leanpub.com/integrationtest Spring MVC webapps Testing Require a context hierachy Parent as main context Child as webapp context @ContextHierarchy Require a webapp configuration @WebAppConfiguration
  55. 55. 55https://leanpub.com/integrationtest Spring MVC test sample @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = MainConfig.class), @ContextConfiguration(classes = WebConfig.class) }) public class SpringWebApplicationTest extends AbstractTestNGSpringContextTests { ... }
  56. 56. 56https://leanpub.com/integrationtest Tools for testing webapps HTML testing tools Interact with HTML/CSS  Fill this field  Click on that button HTTP testing tools  Send HTTP requests  Get HTTP responses
  57. 57. 57https://leanpub.com/integrationtest Drawback of previous approaches Very low-level Fragile! Remember that testing is about ROI  Breaking tests with every HTML/CSS change is the worst way to have positive ROI  (There are mitigation techniques  out of scope) Attribution:©MilanNykodym,CzechRepublic
  58. 58. 58https://leanpub.com/integrationtest Drawback of Testing with controllers as entry point Bypass many URL- related features Interceptors Spring Security etc. ControllerSCSI.JPGbyRosco
  59. 59. 59https://leanpub.com/integrationtest Spring Test to the rescue Spring Test has a large chunk dedicated to MVC Since 3.2 Can test with URL as entry-points Fluent API with static imports CoastguardHelicopter(8016050677)"byPaulLucasfromLeicestershire,UK-CoastguardHelicopter
  60. 60. 60https://leanpub.com/integrationtest Spring MVC Test overview
  61. 61. 61https://leanpub.com/integrationtest MockMvc class responsibilities Request builder Configures the Fake request Request matcher Misc. assertions Request handler Do something  OOB logger
  62. 62. 62https://leanpub.com/integrationtest Available configuration on Request Builder HTTP method GET POST etc. HTTP related stuff Headers Parameters Content JavaEE related stuff Request attributes Session etc.
  63. 63. 63https://leanpub.com/integrationtest Request Builder sample MockHttpServletRequestBuilder builder = get("/customer/{id}", 1234L) .accept("text/html") .param("lang", "en") .secure(true); GET /customer/1234?lang=en HTTP/1.1 Accept: text/html
  64. 64. 64https://leanpub.com/integrationtest Some matchers Checks result is a Forward  Either exact  Or regexp Redirect  Either exact  Or regexp JSON payload asafetywaxmatchboxandmatchesbyAathavanjaffna
  65. 65. 65https://leanpub.com/integrationtest Some other matchers Request class Handler class Controller Content class Cookie class Status class HTTP code Flash class (Attributes, not the techno) View class Model class "OvejasenPatagonia-Argentina"bywrittecarlosantonio
  66. 66. 66https://leanpub.com/integrationtest The JavaEE world JavaEE has unique challenges CDI has no explicit wiring  You can @Veto you own classes  But no compiled ones Different application servers  Same specifications  Different implementations
  67. 67. 67https://leanpub.com/integrationtest Deploy only what you want Standalone API to deploy only resources relevant to the test Just pick and choose Maven Integration Gradle too…
  68. 68. 68https://leanpub.com/integrationtest Shrinkwrap sample String srcMainWebapp = "src/main/webapp/"; ShrinkWrap.create(WebArchive.class, "myWar.war") .addClass(MyService.class) .addPackage(MyModel.class.getPackage()) .addAsWebInfResource("persistence.xml", "classes/META-INF/persistence.xml") .addAsWebInfResource( new File(srcMainWebapp, "WEB-INF/page/my.jsp"), "page/my.jsp") .addAsWebResource( new File(srcMainWebapp, "script/my.js"), "script/my.js") .setWebXML("web.xml");
  69. 69. 69https://leanpub.com/integrationtest Maven integration sample File[] libs = Maven.resolver() .loadPomFromFile("pom.xml") .importDependencies(COMPILE, RUNTIME).resolve() .withTransitivity().asFile(); ShrinkWrap.create(WebArchive.class, "myWar.war") .addAsLibraries(libs);
  70. 70. 70https://leanpub.com/integrationtest Different application servers Abstraction layer to Download Deploy applications Test Container adapters TomEE JBoss Weld etc. Full Maven integration
  71. 71. 71https://leanpub.com/integrationtest Arquillian Test sample public class ArquillianSampleIT extends Arquillian { @Inject private MyService myService; @Deployment public static JavaArchive createDeployment() { return ...; } @Test public void should_handle_service() { Object value = myService.handle(); Assert.assertThat(...); } }
  72. 72. 72https://leanpub.com/integrationtest Arquillian configuration sample <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="..." xsi:schemaLocation=" http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="tomee" default="true"> <configuration> <property name="httpPort">-1</property> <property name="stopPort">-1</property> </configuration> </arquillian>
  73. 73. https://leanpub.com/integrationtest Twitter: @itfromtrenches

×