Download Testing_Java_Using_Groovy

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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/
Related documents