Dans la première partie nous avons effectué la migration de la librairie en elle-même.
Maintenant nous allons travailler sur les tests unitaires qui vont nous permettre de valider notre librairie (et découvrir quelques blagues).
.Net Core inclus dans sa logique les tests unitaires. C'est à dire que l'on peut indiquer qu'un projet possède des tests unitaires et que l'on pourra les exécuter avec la commande dotnet test.
Initialement j'ai utiliser les tests de Microsoft. Mais depuis j'ai privilégié la librairie xUnit car j'aime bien son approche.
La chance veuille que .Net Core supporte les tests "xunit", donc la migration des tests va nécessité de créer un nouveau projet mais également de convertir tous les tests car ils ne fonctionnent pas de la même manière que les tests MS.
Pour commencer nous allons faire comme avec la librairie SwissEphNet:
En plus nous supprimerons l'ancien projet de la solution et du dossier (SwissEphNet.Tests-Old.csproj).
Ouvrir le fichier "project.json" des tests et remplacer le contenu par
{
"version": "1.0.0-*",
"testRunner": "xunit",
"dependencies": {
"xunit": "2.2.0-beta4-build3444",
"dotnet-test-xunit": "2.2.0-preview2-build1029"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
}
}
}
}
comme indiqué sur sur la page xUnit pour .Net Core sauf que j'ai référencée la dernière version de la librairie xUnit (la build 3444).
Dans les dépendances on va ajouter la librairie "SwissEphNet" à la version "2.5.*".
"dependencies": {
"xunit": "2.2.0-beta4-build3444",
"dotnet-test-xunit": "2.2.0-preview2-build1029",
"SwissEphNet": "2.5.*"
},
Le fait d'indiquer "2.5.*" indique la "dernière" version disponible de la librairie (selon les règles du semver que .Net Core suit). Comme notre solution contient la plus haute version de la librairie, c'est le projet local qui est pris en compte (et pas une version sur nuget.org).
Je ne vais pas faire un tutoriel sur la migration des tests, car ce n'est pas le propos de cette série d'article, je vous conseille de regarder le projet sur Github pour voir le résultat final.
Mais pour résumer:
using Microsoft.VisualStudio.TestTools.UnitTesting; par using Xunit;[TestClass] qui n'ont pas d'équivalent en xUnit[TestMethod] par [Fact]Assert.AreEqual() par Assert.Equal() en xUnit les "Assert.Are*()" et "Assert.Is*()" n'existent pas.[TestInitialize] sont déplacées dans le constructeur du test[TestCleanup] sont déplacée dans une méthode "Dispose()" et on fait implémenter IDisposable la classe du test. Assert.Inconclusive(); n'ont pas vraiment d'équivalent en xUnit, on le remplace par un paramètre "Skip" dans l'attribut "Fact": [Fact(Skip = "")][ExpectedException] mais par une méthode d'assertion Assert.Throws<>()Une fois que tout le code à été converti, on peut enfin compiler.
Ensuite on peut exécuter les tests depuis VS
Menu "Test>Exécuter>Tous les tests"
ou depuis une ligne de commande
dotnet test
Vous pouvez rencontrer des tests qui échouent car certaines précisions n'ont pa été correctement adaptés. Mais normalement seul le test "SwissEphNet.Tests.Issue18Test.LoadAsteroidData" doit échouer.
Ce test existe pour vérifier le bon fonctionnement du chargement des fichiers astéroïde, pour celà il nous faut lire un fichier "réel". Pour des raisons pratiques j'avais inclus ce fichier dans les ressources de la librairie de tests. Donc il faut faire de même pour ce projet. Pour celà on retourne dans le fichier "project.json", et on ajoute une section de configuration de la compilation:
{
"version": "1.0.0-*",
"testRunner": "xunit",
"buildOptions": {
"embed": [ "files/*" ]
},
"dependencies": {
"xunit": "2.2.0-beta4-build3444",
"dotnet-test-xunit": "2.2.0-preview2-build1029",
"SwissEphNet": "2.5.*"
},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
}
}
}
}
cette configuration indique qu'il faut incorporer tous les fichiers se trouvant dans le dossier "files" du projet comme ressources.
La vraie difficulté pour les tests est le changement de framework de tests.
Une autre différence c'est qu'on ajouté une référence à un autre projet via le project.json, mais sachez que vous pouvez faire la même chose via VS et l'option "Ajouter une référence" comme auparavant, VS modifiera le project.json a votre place.
A la prochaine,
Yanos