Your SlideShare is downloading. ×
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Boosting Your Testing Productivity with Groovy

2,430

Published on

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
  • thanks
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,430
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
57
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Boosting your testing productivity with Groovy James Williams, Spatial Networks Andres Almiray, Oracle BOF-5101
  • 2.
      • Have fun while programming tests
  • 3. Agenda
    • What is Groovy
    • Groovy + Testing Frameworks
    • Mocking with Groovy
    • Grails Testing
    • Testing Databases
    • Functional Testing
    • Resources
  • 4. What is Groovy?
    • Groovy is an agile and dynamic language for the Java Virtual Machine
    • Builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby & Smalltalk
    • Makes modern programming features available to Java developers with almost-zero learning curve
    • Supports Domain Specific Languages and other compact syntax so your code becomes easy to read and maintain
  • 5. What is Groovy?
    • Increases developer productivity by reducing scaffolding code when developing web, GUI, database or console applications
    • Simplifies testing by supporting unit testing and mocking out-of-the-box
    • Seamlessly integrates with all existing Java objects and libraries
    • Compiles straight to Java byte code so you can use it anywhere you can use Java
  • 6. HelloWorld.java
    • public class HelloWorld {
    • String name;
    • public void setName(String name)
    • { this.name = name; }
    • public String getName(){ return name; }
    • public String greet()
    • { return “Hello “ + name; }
    • public static void main(String args[]){
    • HelloWorld helloWorld = new HelloWorld()
    • helloWorld.setName( “Groovy” )
    • System.err.println( helloWorld.greet() )
    • }
    • }
  • 7. HelloWorld.groovy
    • public class HelloWorld {
    • String name;
    • public void setName(String name)
    • { this.name = name; }
    • public String getName(){ return name; }
    • public String greet()
    • { return “Hello “ + name; }
    • public static void main(String args[]){
    • HelloWorld helloWorld = new HelloWorld()
    • helloWorld.setName( “Groovy” )
    • System.err.println( helloWorld.greet() )
    • }
    • }
  • 8. Equivalent HelloWorld 100% Groovy
    • class HelloWorld {
    • String name
    • def greet() { "Hello $name" }
    • }
    • def helloWorld = new HelloWorld(name : " Groovy" )
    • println helloWorld.greet()
  • 9. Groovy + Testing Frameworks
    • Any Groovy script may become a testcase
      • assert keyword enabled by default
    • Groovy provides a GroovyTestCase base class
      • Easier to test exception throwing code
    • Junit 4.x and TestNG ready, Groovy suports JDK5+ features
      • Annotations
      • Static imports
      • Enums
  • 10. Testing exceptions in Java
    • public class JavaExceptionTestCase extends TestCase {
    • public void testExceptionThrowingCode() {
    • try {
    • new MyService().doSomething();
    • fail("MyService.doSomething has been implemented");
    • }catch( UnsupportedOperationException expected ){
    • // everything is ok if we reach this block
    • }
    • }
    • }
  • 11. Testing exceptions in Groovy
    • class GroovyExceptionTestCase extends GroovyTestCase {
    • void testExceptionThrowingCode() {
    • shouldFail( UnsupportedOperationException ){
    • new MyService().doSomething()
    • }
    • }
    • }
  • 12. Alright, but how do I run Groovy tests?
    • Pick your favorite IDE!
      • IDEA
      • Eclipse
      • NetBeans
    • Command line tools
      • Ant
      • Gant
      • Maven
      • Good ol’ Groovy shell/console
  • 13. Mocking with Groovy
    • Known mocking libraries
      • EasyMock – record/replay
      • Jmock – write expectations as you go
    • Use dynamic proxies as stubs
    • Use StubFor/MockFor
      • Groovy mocks rely on MetaClasses to do their magic
      • Caveat: use them only for Groovy classes
  • 14. Groovy Mocks
  • 15. Grails testing
    • Fairly similar to testing in core Groovy
    • Plugins a plenty
      • easyb
      • Canoo WebTest
      • Selenium
      • DBUnit
      • jsUnit
      • Cobertura
      • JUnit is built in
  • 16. Testing Taglibs
    • Can be tested with Junit
    • Need to extend several metaClasses that are not in testing scope
      • out
      • Encoders/Decoders
    • General format:
      • className.tagName( [ attrs as Map], body)
  • 17. Grails Taglibs
  • 18. Testing Databases
    • DbUnit: a Junit extension for testing databases
    • Several options at your disposal
      • Old school – extend DatabaseTestCase
      • Flexible – use an IDataBaseTester implementation
      • Roll your own Database testcase
  • 19. Inline XML dataset
    • import org.dbunit.*
    • import org.junit.*
    • class MyDBTestCase {
    • IDatabaseTester db
    • @BeforeClass void init(){
    • db = new JdbcDatabaseTester("org.hsqldb.jdbcDriver",
    • "jdbc:hsqldb:sample", "sa", "" )
    • def dataset = """
    • <dataset>
    • <company name=&quot;Acme&quot;/>
    • <employee name=&quot;Duke&quot; company_id=&quot;1&quot;>
    • </dataset>
    • &quot;&quot;&quot;
    • db.dataset = new FlatXmlDataSet( new StringReader(dataset) )
    • db.onSetUp()
    • }
    • @AfterClass void exit() { db.onTearDown() }
    • }
  • 20. Compile-checked dataset
    • import org.dbunit.*
    • import org.junit.*
    • Import groovy.xml.MarkupBuilder
    • class MyDBTestCase {
    • IDatabaseTester db
    • @BeforeClass void init(){
    • db = new JdbcDatabaseTester(&quot;org.hsqldb.jdbcDriver&quot;,
    • &quot;jdbc:hsqldb:sample&quot;, &quot;sa&quot;, &quot;&quot; )
    • def dataset = new MarkupBuilder().dataset {
    • company( name: Acme )
    • employee( name: &quot;Duke&quot;, company_id: 1 )
    • }
    • db.dataset = new FlatXmlDataSet( new StringReader(dataset) )
    • db.onSetUp()
    • }
    • @AfterClass void exit() { db.onTearDown() }
    • }
  • 21. Functional Testing
    • These tests usually require more setup
    • Non-developers usually like to drive these tests
    • Developers usually don’t like to code these tests
    • No Functional Testing => unhappy customer => unhappy developer
  • 22. Groovy to the rescue!
    • [Any of the following] + Groovy = success!
    • Web testing -> Canoo WebTest
    • Swing testing -> FEST
    • BDD testing -> Easyb
  • 23. FEST + Easyb
  • 24. For More Information
    • http://groovy.codehaus.org
    • http://grails.org
    • http://junit.org
    • http://testng.org
    • http:// www.dbunit.org
    • http:// webtest.canoo.com
    • http://easyb.org
    • http:// easytesting.org
    • http :// jameswilliams.be
    • http:// jroller.com/aalmiray
  • 25. James Williams, Spatial Networks Andres Almiray, Oracle BOF-5101

×