0% found this document useful (0 votes)
50 views

Testing Java Using Groovy

The document discusses using Groovy and mock objects for unit testing Java code. It introduces Groovy, describes how to apply Groovy to testing, covers mock objects and the TestNG framework, and previews a demonstration of these concepts.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
50 views

Testing Java Using Groovy

The document discusses using Groovy and mock objects for unit testing Java code. It introduces Groovy, describes how to apply Groovy to testing, covers mock objects and the TestNG framework, and previews a demonstration of these concepts.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 15

QuickTime and a

TIFF (Uncompressed) decompressor


are needed to see this picture.

Unit Testing Java using


Groovy and Mock Objects
Walker Hale
Human Genome Sequencing Center
Baylor College of Medicine
The Plan
Groovy makes testing Java better.
Motivation
Introduce Groovy
Apply Groovy to Testing
Mock Objects
TestNG
Grand Demo
The Setting
Java shop
Subversion for version control
Maven 2 for most builds
Groovy for various tasks
Many apps running against a common
database and set of libraries
An Ideal Deliverable in Our Shop
Code checked into version control
Builds with maven 2
Passes all unit tests

$ svn checkout \
$repo/my-project/trunk \
my-project
$ cd my-project
$ mvn test
The Plot
The Motivation
More unit testing!
The Insight
Small changes in the difficulty or unpleasantness
of a task produce disproportionately large changes
in how much that task is performed.
Enter Groovy
Groovy in 15 Minutes
Almost all Java code is Groovy code
no inner classes
http://groovy.codehaus.org/Differences+from+Java
Groovy adds:
Fun syntactic sugar
Lazy method dispatch
Methods to the standard Java library classes
Closures
Groovy-specific classes
Interactive shell
Syntax Sugar
// MapSample.java
import java.util.*;
public class MapSample {
public static void main(String[] args) {
Map<Object, Object> m =
new LinkedHashMap<Object, Object>();
m.put("red" , 1);
m.put("blue", 2);
System.out.println(m.getClass());
System.out.println(m);
}
}

// MapSampleG.groovy
def m = [red:1, blue:2]
println m.getClass()
println m // .toString() for Java-style output
Syntax Sugar
$ javac MapSample.java
$ java MapSample
class java.util.LinkedHashMap
{red=1, blue=2}

$ groovy MapSampleG.groovy
class java.util.LinkedHashMap
["red":1, "blue":2]

$ groovyc MapSampleG.groovy
$ java -cp `pwd`:$GROOVY_EMBED_JAR MapSampleG
class java.util.LinkedHashMap
["red":1, "blue":2]
Lazy Dispatch & Expanding JDK
// DispatchSample.groovy
def x = "Hello World"
def l = ["abc", "def"]
println x.split()
l.addAll x.split().toList()
println l
l << "more" << "stuff"
println l

$ groovy DispatchSample.groovy
{"Hello", "World"}
["abc", "def", "Hello", "World"]
["abc", "def", "Hello", "World", "more", "stuff"]
Closures 1
// ClosureSample1.groovy
def c = { it + it }
println c(2)
println c("hello ")
def foo(Closure cl) {
cl(5, 7)
}
println foo { x, y -> x + y }
println foo { x, y -> x * y }

$ groovy ClosureSample1.groovy
4
hello hello
12
35
Closures 2
// ClosureSample2.groovy
[2, 3, 5].each {
println it * it
}
[red:1, blue:2].each { key, value ->
println key * value
}

$ groovy ClosureSample2.groovy
4
9
25
red
blueblue
Closures 3
// ClosureSample3.groovy
def strategies = [ add:{ a,b -> a + b },
mult:{ a,b -> a * b } ]
[[1,2], [3,4], [5,6]].each { data ->
strategies.each { name, code ->
printf "%d %4s %2d\n", data,
name, code(data)
}
}
$ groovy ClosureSample3.groovy
[1, 2] add 3
[1, 2] mult 2
[3, 4] add 7
[3, 4] mult 12
[5, 6] add 11
[5, 6] mult 30
Testing in Groovy

Compiled (not limited) with JUnit 3.8.2


Adds
GroovyTestCase
New assertions, such as shouldFail
GroovyTestSuite
Simple command line operation
URLs
http://groovy.codehaus.org/Testing+Guide
http://groovy.codehaus.org/Unit+Testing
Demo Time!
Resources

http://groovy.codehaus.org/
Documentation
Differences+from+Java
Testing+Guide
http://searchgroovy.org/

You might also like