Javaone2008 Bof 5101 Groovytesting

  • 5,252 views
Uploaded on

Boosting Your Testing Productivity with Groovy

Boosting Your Testing Productivity with Groovy

More in: Business , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,252
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
200
Comments
0
Likes
5

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