javacro'14 - taking testing to its limits – aleš justin
Upload: hujak-hrvatska-udruga-java-korisnika-croatian-java-user-association
Post on 28-Nov-2014
902 views
DESCRIPTION
Google App Engine (GAE) is a popular PaaS offering. While its scalable and reliable environment is hidden behind custom API, this makes GAE apps hard to port over to other non-GAE environments. What if one could implement such similar environment? And you could simply move your GAE application’s .war file to this new environment and it would just work? But the question we need to ask ourselves first, how do we know that such alternative environment works in the first place? Java EE has had its Technology Compatibility Kit (TCK) from day one. This time we’ll introduce you to GAE TCK and show you how to run it against an alternative JBoss CapeDwarf GAE API implementation. The GAE TCK is built completely on open source software, and it is a collaboration between Red Hat and Google on making the GAE API and its implementations better. The goal is not just to run the tests, but also engage users and developers with a bunch of exciting extensions that range from cool html reporting to bytecode manipulation of external tests. If you care about GAE, testing, Arquillian, ShrinkWrap, this is the session not to miss!TRANSCRIPT
Taking testing to its limits
Aleš Justin, Red Hat
http://javacro.org/http://javacro.org/
Agenda
• Testing?
• GAE TCK
• JUnit, ShrinkWrap, Arquillian
• Code coverage, reports, CI, …
Testing?
• Do you test?
• Never enough time
• Hard to test
• “If there is no test, it doesn’t work”
• ~50% test code
• New frameworks to actually test
GAE TCK
• GAE?
• Google App Engine
• JBoss CapeDwarf
• Open source GAE API impl
• Does it work?
• Voila TCK - www.appengine-tck.org
JUnit
• Simple as @Test
• Together with Maven Surefire plugin
• Extendable
• @RunWith
• Assert, Assume, @Ignore, …
ShrinkWrap
• Binaries abstraction
• No more Ant or Maven assemblies
• Nice and simple, yet powerful API to create *programmatic* deployments
Arquillian
• Environment / runtime abstraction
• Proper and easy in-container testing
• “Container” imp
• A ton of existing container impls
• Invocation protocol
• Servlet, JMX, @RunAsClient, etc
Arquillian
• Transparent container usage
• Exactly one container impl on classpath
• JUnit, TestNG support
• Extendable
• Drone, Graphene, etc
TCK Features
• NOTE — It’s all *generic*
• Not tied to GAE API or TCK
• TODO of moving this into separate project
Code coverage
• Display API usage
• Bytecode check
• Fast
• No runtime involved
• Link against source code
• JSP check
Reports
• Graphical results presentation
• Pie and XY chart
• Drill-down for more info
• Pushed from TeamCity CI
• Custom push TeamCity plugin
• Endpoints stubs
Utils
• Multisuite
• One big deployment
• Environment info and extension
• “Events”
• @WithinNamespace, @UserIsLoggedIn
• Transformers
• Turn plain JUnit test into ARQ test
Q&A
• [email protected] / @alesj
• www.capedwarf.org
• www.appengine-tck.org
• https://github.com/GoogleCloudPlatform/appengine-tck