Testen mit Spock

Lesbare Tests als Spezifikationen

Spock ist ein in Groovy geschriebenes einfach zu nutzendes Testframework für Java und Groovy, mit dem der Testcode besser lesbar ist als z.B. in JUnit, und das den Ansatz „Test als Spezifikation“ verfolgt. Dem muss man aber nicht unbedingt folgen, sondern kann seine Tests wie gewohnt, aber mit weniger Aufwand, schreiben. Eine gute Einführung und Übersicht ist in der Spock Framework Reference im Kapitel „Spock Primer“ zu finden. Die Tests in der Beispielapplikation sind in Spock geschrieben.

Beispiel

...
@SpringApplicationConfiguration(classes = GroovaaApplication)
class EntitySpecification extends Specification {

    @Autowired
    private ProjectRepository projectRepository
    @Autowired
    private TaskRepository taskRepository
    @Autowired
    private SprintRepository sprintRepository

    Project project
    CompoundTask task

    public setup() {
        project = new Project()
        project.name ="ein Projekt"
        task = new CompoundTask()
        task.description = "eine neue Aufgabe"
        println("setup called")
    }

    @Autowired
    private StartupService startupService

    public cleanup() {
        startupService.cleanupAll()
    }

    def "association of a task to a project"() {
        when:
        project.getBacklog().add(task)
        then:
        project.getBacklog().all.size() == 1
        task.getProject().one == project
    }

    def "save entities and clear " () {
        when:
        projectRepository.save(project)
        then:
        projectRepository.count() == 1
    }

    def "is cleanup really called" () {
        when:
        // nothing happened
        def x = 0
        then:
        projectRepository.count() == 0
    }
}

Aufgaben

  1. Schreiben Sie Spock Tests für eine Ihrer eigenen Domainklassen. Nehmen Sie beispielsweise die Testklasse EntitySpecification als Vorlage.
  2. Schreiben Sie Spock Spezifikationen für die Services, die Sie als Schnittstelle zur GUI für Ihre eigenen Domainklassen benötigen (siehe z.B. ProjectServiceSpecification).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.