- BASE Logic, Inc.

Download Report

Transcript - BASE Logic, Inc.

Test Driven Development
TDD with Maven, Spring Framework,
CXF and JUnit
Summary
This presentation will cover a single
Maven web module, using the Spring
framework to create a CXF based
webservice, and testing a remote
client with JUnit to verify the CXF
contract.
This presentation will cover the
following topics
Maven 2
Cargo
CXF
Tomcat
Spring Framework
Spring Remoting
JUnit
Takeaway
Attendees will take away a new insight as
to how to create setup a Maven web
module, how to add Spring, Cargo and
CXF capabilities and how to use these
technologies to perform unit testing with a
test driven development lifecycle.
About the Author
Mick Knutson
About Mick Knutson
 President of BASE Logic, Inc
(http://www.baselogic.com)
 Blog (http://www.baselogic.com/blog)
 Won ‘Best in Show’ for GoGrid.com @ Linux World
2008
 Manage Multiple Enterprise Deployments @ FedEx
with >4MIL message transactions per hour.
Setting Up Maven
Setting up a single module Maven
project.
Maven Quick Start
 Download Apache Maven (http://maven.apache.org)
 Unpack Maven to C:/maven
 Install Sun JDK to c:/jdks/java (NOT C:/Program Files/java)
 Create workspace for new project (c:/code/ucc2009)
 Create blank Webapp archetype (template)
 mvn archetype:create -DgroupId=com.mycompany.app DartifactId=my-webapp -DarchetypeArtifactId=maven-archetypewebapp
 Open CMD prompt to c:/code/ucc2009
Convention Over Configuration
 Java source Directory
 ./src/main/java/**
 Resources Directory
 ./src/main/resources/**
 Webapp Directory
 ./src/main/webapp/**
 Testing Source
 ./src/test/java/**
 Testing Resources
 ./src/test/resources/**
Maven Quick start
 Single Maven Module directory layout
Project Object Model (pom.xml)
Project Build Descriptor
Group Id
Artifact Id
Artifact Type (jar, war, ear, pom)
Version
Dependency Management
Plugin Management
Build Properties
Adding Spring dependencies
In your pom.xml,
add the following
Spring dependencies
Note <property>:
<spring.version>2.5.6</spring.version>
Spring Framework
Spring does many things, but when you
strip it down to its base parts, Spring is a
lightweight dependency injection and
aspect-oriented container and framework.
Adding Spring Context
./src/main/webapp/WEB-INF/applicationContext.xml
Adding Spring Context
./src/main/webapp/WEB-INF/applicationContext-services.xml
Adding CXF dependencies
In your pom.xml,
add the following
CXF dependencies
Note <property>:
<cxf.version>2.2.3</cxf.version>
Adding CXF Context Server entries
Create applicationContext-services.xml
Adding web.xml entries
Adding Spring and CXF entries
Adding JUnit Test Case
Create new Test Case
Instantiate Test Spring Context
Get Client Proxy Bean
Execute Proxy Methods on Bean
Assert outcome.
Adding JUnit Test
Create ./src/test/java/**/MessageWebServiceTest
Create Service for Test Case
Create Service to match our test
Create Service for Test Case
Create Service Interface
Annotate the Interface as
@WebService
Create Service Implementation Class
Annotate the Class as @WebService
defining the Service Interface as the
endpointInterface.
Adding Service Interface
Create src/main/java/**/MessageService
Adding Service Implementation
Create src/main/java/**/MessageServiceImpl
Adding Spring Test Context
Create applicationContext-test.xml
Adding test.properties
Create src/test/resources/test.properties
Cargo Tomcat Plugin for Maven
1. Compile and Package War
2. Start embedded Tomcat container before
running Tests
3. Deploy war to Tomcat container
4. Run Test Cases
5. Assert Test Outcome
6. Stop embedded Tomcat container after
tests complete.
Cargo Tomcat Plugin
We want to start
Tomcat with the
Cargo plugin and
deploy our
webapp before
running unit tests
Running Standalone Cargo Plugin
By running run-cargo-tomcat.bat, we can deploy our war,
and verify our service endpoint in a browser manually
CXF Generated WSDL
Tying it all together
Compile and Package war
Start Cargo Tomcat
Deploy war to Tomcat
Run Tests
Assert Results
Stop Cargo Tomcat
Start Cargo, and Run Test
Executing mvn clean verify
Test Success
Successful Test result
Next Steps
Debug-As JUnit Tests in Eclipse
Remote Debugging with Eclipse
Use Easy Mock to stub Spring services
Integrate Coburtura to measure Test Code
Coverage
Questions?
Any questions of comments?
The End…
Thank you for your time and
attention…
Mick Knutson
BASE Logic, Inc.
Enterprise Architecture, Design, Mentoring & Agile Consulting
Phone. (866) BLiNC-411: (254-6241-1)
Fax. (415) 685-4233
Website: http://www.baselogic.com
Website: http://www.baselogic.com/blog
Linked IN: http://www.linkedin.com/in/mickknutson
References
 Source Code (http://baselogic.com/code/ucc2009/webapp.zip)
 Slide Deck PPT (http://baselogic.com/code/ucc2009/ucc.ppt)
 Apache Maven (http://maven.apache.org)
 Springframework (http://www.springsource.com)
 CXF (http://cxf.apache.org)
 Cargo Plugin (http://cargo.codehaus.org/Maven2+plugin)
 SOAP UI (http://soapui.org)