http://www.opitz-consulting.com/go/3-6-11
Groovy erfreut sich immer größerer Beliebtheit. Viele "grüne Wiese Projekte" werden damit und vor allem mit dem darauf aufsetzenden Grails Framework realisiert. Will man Groovy in einem bereits existierenden Java-Projekt verwenden bedeutet das nicht automatisch, dass das Projekt dazu grundlegend umgestellt werden muss. Insbesondere im Bereich der funktionalen Tests kann Groovy relativ problemlos integriert werden.
Unser Solution Architect Torsten Mandry stellte bei den SD Days am 09.11.2014 in Essen, der jährlichen Konferenz unserer Software-Development-Spezialisten, am Beispiel einer existierenden JSF-Anwendung vor, wie diese mit Hilfe von Groovy und den Frameworks Spock und Geb automatisiert getestet werden kann.
--
Über uns:
Als führender Projektspezialist für ganzheitliche IT-Lösungen tragen wir zur Wertsteigerung der Organisationen unserer Kunden bei und bringen IT und Business in Einklang. Mit OPITZ CONSULTING als zuverlässigem Partner können sich unsere Kunden auf ihr Kerngeschäft konzentrieren und ihre Wettbewerbsvorteile nachhaltig absichern und ausbauen.
Über unsere IT-Beratung: http://www.opitz-consulting.com/go/3-8-10
Unser Leistungsangebot: http://www.opitz-consulting.com/go/3-8-874
Karriere bei OPITZ CONSULTING: http://www.opitz-consulting.com/go/3-8-5
10. Beispiel: Array- bzw. List-Handling
*O+BWB
for (String it : new String [] { Rod, Carlos, Chris })
System.out.println(it);
*O(SPPWZ
[Rod, Carlos, Chris].each { println it }
11. Beispiel: Test
class TrivialerTest {
@Test
def testet ein paar triviale Dinge() {
assert 1 + 1 == 2
assert 2 != 1
}
}
17. Beispiel: given when then
class MathSpec extends spock.lang.Specification {
def Maximum von zwei nummerischen Werten() {
given:
def a = 1
def b = 5
def c = 5
when:
def r = Math.max(a, b)
then:
r == c
}
}
18. Beispiel: expect
class MathSpec extends spock.lang.Specification {
def Maximum von zwei nummerischen Werten() {
expect:
Math.max(1, 5) == 5
Math.max(2, 3) == 3
}
}
19. Beispiel: exception
class MathSpec extends spock.lang.Specification {
def Division durch 0 löst ArithmeticException aus() {
when:
1.0 / 0
then:
ArithmeticException e = thrown()
e.message =~ Division
}
}
20. Beispiel: data-driven
class MathSpec extends spock.lang.Specification {
def Maximum von zwei nummerischen Werten() {
expect:
Math.max(value1, value2) == result
where:
value1 [1, 2, 3]
value2 [5, 3, 7]
result [5, 3, 7]
}
}
21. Beispiel: data-table
class MathSpec extends spock.lang.Specification {
@Unroll(Maximum von #value1 und #value2 ist #result)
def Maximum von zwei nummerischen Werten() {
expect:
Math.max(value1, value2) == result
where:
value1 | value2 | result
1 | 5 | 5
2 | 3 | 3
7 | 3 | 7
}
}
26. Beispiel - Scripting Ansatz
def Addition von zwei Zahlen() {
given:
go http://web2.0rechner.de/
expect:
title == Web 2.0 Taschenrechner
when:
$(a#num_1).click()
$(a#A42).click()
$(a#num_2).click()
$(a#btn_equal).click()
then:
$(input#input).value() == 3
}
34. Schritt 1 - trivialer Groovy Test
Ziel: Maven Modul erweitern,
so dass der folgende Groovy Test ausgeführt wird
class TrivialerTest {
@Test
void testet ein paar triviale Dinge() {
assert 1 + 1 == 2
assert 2 != 1
}
}
42. Test Classes vs. Test Sources
.BWFOTVDIUTUBOEBSEN£žJHJOEFO5FTU4PVSDFTOBDIKBWB5FTU%BUFJFO
(SPPWZ%BUFJFO NJU%BUFJFOEVOHHSPPWZ
XFSEFOEBIFSOJDIUHFGVOEFO
.BWFOTPMMJOEFODPNQJMJFSUFO,MBTTFOOBDI5FTUTTVDIFO
properties
maven.test.search.classdirtrue/maven.test.search.classdir
/properties
43. mvn verify
...
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ groovy-functional-tests ---
[INFO] Surefire report directory: D:ProjekteGroovy_kind_of_TestSourcesgroovy-functional-tests
targetsurefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running de.javandry.groovyfunctionaltests.TrivialTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.314 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
44. Schritt 2 - erste einfache Geb Spec
Ziel: Maven Modul erweitern, so dass
die folgende Geb Specification ausgeführt wird
class LoginSpec extends GebReportingSpec {
static final validCredentials = [username: 'pl2', password: '2lp']
def login with valid credentials() {
given:
to LoginPage
when:
loginWith validCredentials
then:
at IcUebersichtPage
}
}