Université des languages
Scala tools
Fabrice Sznajderman
Plan
• SBT
• Librairies de test
• (Framework web)
SBT
Historique
Manuel
Script
Ant
Maven
Gradle
SBT
Automatisation
Portabilité
Standardisation
Extensibilité
Interactivité
Automatisation
Portabilité
Standardisation
Extensibilité
SBT
Simple Build Tool• Gérer les dépendances
• Compiler
• Publier des artefacts
• Exécuter des tests
Fonctionnalités clefs
• Shell
• Continuous <Task>
• Exécution des tâches en parallèle
• Compilation incrémentale
• Exécution des tests intelligente
• Extension simplifiée
Concepts clefs
• Task[T] :
• Unité de traitement
• Les tasks sont exécutées à la demande
• Exécutées une fois par run
SBT se base sur 2 concepts simple :
Tasks et Settings

On va pouvoir créer des dépendances
entre les tâches
• Setting[T] :
• Propriété de configuration
• Les settings sont évaluées uniquement au chargement
du projet
Définition d’une task
Définition d’un setting
Définition d’une task avec paramètre
Accès à la valeur d’une task ou setting
la méthode value() permet de lire le résultat (task) ou valeur
(setting)
Dépendance entre tâches
Pour créer une dépendance entre 2 tâches, il faut
que l’une accède au résultat de l’autre :
otherTask oneTask
Dépendance entre tâches
SBT est capable d’exécuter des tâches en parallèle
quand cela est possible :
otherTask oneTask
thirdTask
Shell : Inspect
La commande inspect avec le paramètre tree
permet de voir l’arbre de dépendances d’une
tâche :
> inspect tree otherTask
[info] sbtprojectdemo/*:otherTask = Task[Int]
[info] +-sbtprojectdemo/*:oneTask = Task[Int]
Shell : Inspect
La commande inspect avec le paramètre uses
permet de voir la liste des tâches utilisant cette
tâches
> inspect uses oneTask
[info]
[info] sbtprojectdemo/*:otherTask
Shell : show
La commande show affiche la valeur d’un setting
ou le résultat d’une task
> show baseDirectory
[info] /Users/fsznajderman/Dev/projects/sbtDemo
> show oneTask
[info] 2
[success] Total time: 0 s, completed 11 janv. 2016 13:02:00
Descripteur de build
• build.sbt (ou build.scala historique)
• Descripteur écrit avec [un DSL] Scala
• Principe de convention over configuration
• Projet mono module : descripteur non obligatoire
• projet multi module : Un seul fichier à la racine du
projet
Définition des versions
Possibilité de définir la version
• du compilateur scala
• de SBT
directement dans le fichier build.sbt
sbt.version=0.13.7 scalaVersion := 2.11.7
Structure d’un projet poc
myProject /
Structure d’un projet d’entreprise
Structure d’un projet multi-module
Structure d’un projet multi-module
• Un seul descripteur build.sbt à la racine du projet
• Toute la configuration est contenue dedans
• Possibilité de factoriser les settings communs
Shell : interaction avec sous module en particulier
Il est possible d’interagir avec un sous module à partir du shell. Il
faut utiliser la syntaxe suivante :
> repository/compile
> service/test
>show commons/ScalaVersion
Gestion des dépendances
• Gestion des dépendances avec Apache Ivy
• Déclaration dans le fichier build.sbt
• Format pour la déclaration d’une dépendance :
libraryDependencies += groupID % artifactID % revision
Gestion des dépendances
• Possibilité de gérer manuellement ses dépendances.
• Ce sont des unmanaged dependencies.
• Elles doivent être placées dans le répertoire lib (par
défaut)
Gestion des dépendances
• Il est possible de gérer plus finement les versions des
dépendances avec SBT.
• SBT va rechercher la librairie adaptée à la version de
compilateur Scala définie dans le build.sbt
• Cette fonctionnalité s'applique uniquement aux librairies
construite avec SBT
libraryDependencies += groupID %% artifactID % revision
Classes utilitaires
• IO : Manipulation du File System
• Process : Execution de process externe
• Stream : Accès sur le système de log
Plugins
• IDEs
• Test
• Code coverage
• Static code analysis
• packaging
• Releases
• Deployment integration
• Android & iOs
• Monitoring integration
• Web and front-end development
• Documentation
• Library dependency
• Utility and system
• Database
• Code generator
• Game development
• OSGi
http://www.scala-sbt.org/0.13/docs/Community-Plugins.html
Hands-on!
Démo
Librairies de test
ScalaTest
Spec2
ScalaCheck
ScalaTest
• Approche similaire à celle de JUnit
• Utilisation principalement d'assertions
• Ouvert sur de nombreux outils du marché comme :
• Mockito,
• Junit,
• TestNG
ScalaTest
• Propose plusieurs styles pour rédiger les TUs.
Chaque approche répond à un besoin particulier.
• FunSuite : Proche du style xUnit
• FlatSpec : Introduction à BDD
• FunSpec : Concept tiré de Ruby's RSpec tool
• http://www.scalatest.org/user_guide/
selecting_a_style
ScalaTest : FunSuite
ScalaTest : FlatSpec
Scala Spec2
• Basé sur l'approche Behavior Driven Development
• Les tests décrivent le fonctionnement attendu des
composants testés littéralement
• Propose un DSL riche
Scala Spec2
ScalaCheck
• Basé sur l’approche Property Based Testing
• Inspirée de la librairie Haskell : QuickCheck
• Générateur de données aléatoire
• Pas de dépendance autre que le runtime Scala
• Utilisation standalone ou avec Spec2 ou ScalaTest
ScalaCheck
ScalaCheck
Hands-on!
A vous de jouer!

Universitélang scala tools

  • 1.
    Université des languages Scalatools Fabrice Sznajderman
  • 2.
    Plan • SBT • Librairiesde test • (Framework web)
  • 3.
  • 4.
  • 5.
    SBT Simple Build Tool•Gérer les dépendances • Compiler • Publier des artefacts • Exécuter des tests
  • 6.
    Fonctionnalités clefs • Shell •Continuous <Task> • Exécution des tâches en parallèle • Compilation incrémentale • Exécution des tests intelligente • Extension simplifiée
  • 7.
    Concepts clefs • Task[T]: • Unité de traitement • Les tasks sont exécutées à la demande • Exécutées une fois par run SBT se base sur 2 concepts simple : Tasks et Settings On va pouvoir créer des dépendances entre les tâches • Setting[T] : • Propriété de configuration • Les settings sont évaluées uniquement au chargement du projet
  • 8.
  • 9.
  • 10.
  • 11.
    Accès à lavaleur d’une task ou setting la méthode value() permet de lire le résultat (task) ou valeur (setting)
  • 12.
    Dépendance entre tâches Pourcréer une dépendance entre 2 tâches, il faut que l’une accède au résultat de l’autre : otherTask oneTask
  • 13.
    Dépendance entre tâches SBTest capable d’exécuter des tâches en parallèle quand cela est possible : otherTask oneTask thirdTask
  • 14.
    Shell : Inspect Lacommande inspect avec le paramètre tree permet de voir l’arbre de dépendances d’une tâche : > inspect tree otherTask [info] sbtprojectdemo/*:otherTask = Task[Int] [info] +-sbtprojectdemo/*:oneTask = Task[Int]
  • 15.
    Shell : Inspect Lacommande inspect avec le paramètre uses permet de voir la liste des tâches utilisant cette tâches > inspect uses oneTask [info] [info] sbtprojectdemo/*:otherTask
  • 16.
    Shell : show Lacommande show affiche la valeur d’un setting ou le résultat d’une task > show baseDirectory [info] /Users/fsznajderman/Dev/projects/sbtDemo > show oneTask [info] 2 [success] Total time: 0 s, completed 11 janv. 2016 13:02:00
  • 17.
    Descripteur de build •build.sbt (ou build.scala historique) • Descripteur écrit avec [un DSL] Scala • Principe de convention over configuration • Projet mono module : descripteur non obligatoire • projet multi module : Un seul fichier à la racine du projet
  • 18.
    Définition des versions Possibilitéde définir la version • du compilateur scala • de SBT directement dans le fichier build.sbt sbt.version=0.13.7 scalaVersion := 2.11.7
  • 19.
    Structure d’un projetpoc myProject /
  • 20.
  • 21.
  • 22.
    Structure d’un projetmulti-module • Un seul descripteur build.sbt à la racine du projet • Toute la configuration est contenue dedans • Possibilité de factoriser les settings communs
  • 23.
    Shell : interactionavec sous module en particulier Il est possible d’interagir avec un sous module à partir du shell. Il faut utiliser la syntaxe suivante : > repository/compile > service/test >show commons/ScalaVersion
  • 24.
    Gestion des dépendances •Gestion des dépendances avec Apache Ivy • Déclaration dans le fichier build.sbt • Format pour la déclaration d’une dépendance : libraryDependencies += groupID % artifactID % revision
  • 25.
    Gestion des dépendances •Possibilité de gérer manuellement ses dépendances. • Ce sont des unmanaged dependencies. • Elles doivent être placées dans le répertoire lib (par défaut)
  • 26.
    Gestion des dépendances •Il est possible de gérer plus finement les versions des dépendances avec SBT. • SBT va rechercher la librairie adaptée à la version de compilateur Scala définie dans le build.sbt • Cette fonctionnalité s'applique uniquement aux librairies construite avec SBT libraryDependencies += groupID %% artifactID % revision
  • 27.
    Classes utilitaires • IO: Manipulation du File System • Process : Execution de process externe • Stream : Accès sur le système de log
  • 28.
    Plugins • IDEs • Test •Code coverage • Static code analysis • packaging • Releases • Deployment integration • Android & iOs • Monitoring integration • Web and front-end development • Documentation • Library dependency • Utility and system • Database • Code generator • Game development • OSGi http://www.scala-sbt.org/0.13/docs/Community-Plugins.html
  • 29.
  • 30.
  • 31.
    ScalaTest • Approche similaireà celle de JUnit • Utilisation principalement d'assertions • Ouvert sur de nombreux outils du marché comme : • Mockito, • Junit, • TestNG
  • 32.
    ScalaTest • Propose plusieursstyles pour rédiger les TUs. Chaque approche répond à un besoin particulier. • FunSuite : Proche du style xUnit • FlatSpec : Introduction à BDD • FunSpec : Concept tiré de Ruby's RSpec tool • http://www.scalatest.org/user_guide/ selecting_a_style
  • 33.
  • 34.
  • 35.
    Scala Spec2 • Basésur l'approche Behavior Driven Development • Les tests décrivent le fonctionnement attendu des composants testés littéralement • Propose un DSL riche
  • 36.
  • 37.
    ScalaCheck • Basé surl’approche Property Based Testing • Inspirée de la librairie Haskell : QuickCheck • Générateur de données aléatoire • Pas de dépendance autre que le runtime Scala • Utilisation standalone ou avec Spec2 ou ScalaTest
  • 38.
  • 39.
  • 40.