[CISYSTEM] [UNIT TEST] [SPOCK]
The sourcecode of CISystem is growing and I need to start writing unit tests.
Why unit tests? My domain is called "Wartbar.de" and I really believe you need unit tests to
and it reduces the need for documentation, not completely but it helps.
When I have a refactoring project, I first write the unit tests and then start with the refactoring. Doing it this way I know when my refactoring breaks the code.
So, yes, I could have started with the tests before I start with the implementation. Test-Driven-Development really saves time when what you want to do.
For CISystem I first wanted to find out how to do it before I start with the tests. I wanted to find out which classes I need, threading and sockets are new concepts for me.
Before this project I was coding mainly in C++ and I had my own idea of writing unit tests.
Now coding in Java and Groovy I want to use something new, something what is really state of the art.
I have decided to write my unit tests with Spock using gradle to run them.
You run the tests with
gradle test
These are my first two tests, they are not much more than a "Hello, world!", but I am already fascinated how easy it is writing such tests :
import com.wartbar.data.CINetwork
import spock.lang.*
class NetworkInitializationTest extends spock.lang.Specification{
def "setup node sets label 1"() {
given: " a network object with IP address and port set"
CINetwork network = new CINetwork();
network.setIPAddress("10.0.0.10");
network.setPort("400");
and: "setupNode()"
network.setupNode()
expect: "label is IPAddress:port"
network.getLabel() == "10.0.0.10:400";
}
def "setup node sets label 2"() {
given: " a network object"
CINetwork network = new CINetwork();
expect: "label is IPAddress:port when setting IP address and port and then calling setupNode()"
network.setIPAddress(A);
network.setPort(B);
network.setupNode();
network.getLabel() == A + ":" + B;
where: "where variations of IP address and port are used"
A << ["10.0.0.1","10.2.0.1","10.0.0.5"]
B << ["200","300","1000"]
}
}
and the report result is this :
and this is my gradle build script :
apply plugin: 'groovy'
apply plugin: 'java'
repositories {
mavenLocal()
jcenter()
//mavenCentral()
}
task fatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'com.wartbar.networkinitialization.NetworkInitialization'
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
dependencies {
compile ('org.codehaus.groovy:groovy-all:2.4.6',)
testCompile(
'junit:junit:4.12',
'org.codehaus.groovy:groovy-all:2.4.6',
'org.spockframework:spock-core:1.0-groovy-2.4',
)
testRuntime(
'com.athaydes:spock-reports:1.2.7'
)
}
FYI :
It is fun using Spock!
These are the sources which have helped me this week :
Spock Primer - Its goals are to teach you enough Spock to write real-world Spock specifications, and to whet your appetite for more.
Petri Kainulainen - Writing Unit Tests With Spock Framework: Creating a Gradle Project
The Blog
|
|
|
|
My Technical Blogs
|
|
|
|
|
|
|
|
|
|
|
|
Projects
|
|
|
|
Blogs Of Friends
|
|
|
|
|
|
CV/About
|
|
|