Le lab n°2 - Installer SpecFlow avec une architecture Net Core

écrit par julien.royer publié le mardi 21 novembre 2017
Pour nous aider dans le développement de nos tests BDD, nous allons utiliser un outil de tests automatisés : SpecFlow. Cet outil permet de définir, gérer et exécuter automatiquement des tests "d’acceptances" lisibles et maintenables sur des projets .Net. Comme vous allez le découvrir son installation sur une architecture, .Net Core n'est pas une mince affaire. Suivez le guide!

Installation

Pour la mise en place de l’environnement technique sur notre projet .Net Core, nous avons suivi cet excellent tutoriel : http://geeklearning.io/asp-net-core-application-testing-with-specflow/ que nous allons détaillé d'avantage dans ce mini tutoriel. Pour installer SpecFlow dans l’ordre nous avons :
  • Ajouté l’extension Visual Studio 2017 de SpecFlow
  • Créé un nouveau projet .NET Core Unit Test Project
  • Ajouté le package nugget pour SpecFlow sur le projet
  • Ajouté le package nugget pour SpecFlow .Net Core (non officiel, temporaire mais fonctionnel) sur le projet
  • Modifié les fichiers de configuration de chaque projet de la solution référencée dans le projet de test. On ajoute la référence au full .NET framework (pour SpecFlow) dans les fichiers « csproj » :
<PropertyGroup>    
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
</PropertyGroup>
Attention au « s » sur l’attribut TargetFrameworks
  • Modification du fichier de configuration « csproj » du projet de Test BDD
Etape 1 : Ajout manuel des références des packages SpecFlow et SpecFlow .NetCore :
<ItemGroup>       
...                                                               
<PackageReference Include="SpecFlow" Version="2.1.0" />  
<PackageReference Include="SpecFlow.NetCore" Version="1.0.0-rc8" />    
...
</ItemGroup>
  Etape 2 - Ajout de la référence vers le .Net CLI Tool pour SpecFlow.NetCore :
<ItemGroup>    
<DotNetCliToolReference Include="SpecFlow.NetCore" Version="1.0.0-rc8" />
</ItemGroup>
  Etape 3 - Configuration pour une exécution de SpecFlow.NetCore avant chaque build. Cela permet de rendre les tests visibles par le runner de test après la compilation :
<Target Name="PrecompileScript" BeforeTargets="BeforeBuild">    
<Exec Command="dotnet SpecFlow.NetCore" />
</Target>
  Etape 4 - Nous terminons par cibler le full .net framework dans le projet de test. Nous activons aussi 2 attributs pour outrepasser un bug si une application .NET Core cible le .NET full framework :
<PropertyGroup>    
<TargetFrameworks>net461</TargetFrameworks> 
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> 
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
Attention dernier point important : il ne faut pas oublier de spécifier le framework de test utilisé dans le fichier app.config du projet de test SpecFlow Exemple avec le framework MsTest de Microsoft :
<?xml version="1.0" encoding="utf-8"?>
<configuration>
       <configSections>
             <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
       </configSections>
       <specFlow>
             <unitTestProvider name="MsTest" />
         <generator allowDebugGeneratedFiles="true" />
  </specFlow>
</configuration>
Voilà, c'est fini, vous pouvez respirer un coup!   Pour creuser l'utilisation de la méthodologie BDD je vous invite à lire la suite : Ajouter un scénario de test avec SpecFLow La démarche BDD sur un exemple concret