Comment puis-je référencer un fichier de données intégré pour les tests unitaires pilotés par les données?
-
20-09-2019 - |
Question
Ceci est mon scénario, je veux faire un test unitaire piloté par les données, et i étant l'environnement indépendant souhaite intégrer le fichier de données dans mon assemblée. Comment puis-je référencer puis dans le DataSourceAttribute du test unitaire?.
Je suis en train d'accéder à un fichier Excel 2003 à l'aide du fournisseur Microsoft Jet OLEDB. Le test unitaire fonctionne très bien lorsque le fichier est dans le disque dur, mais pas lorsque je tente d'accéder au fichier de montage intégré. Voici mon exemple:
Original
[DeploymentItem ( "IHRM.Infrastructure.EFRepositories.Tests \ DataDriven.xls"), DataSource ( "System.Data.OLEDB", « Provider = Microsoft.Jet.OLEDB.4.0; Data Source = | DataDirectory | \ dicté par les données .xls; Propriétés étendues = \ "Excel 8.0 \" », "Sheet1 $", DataAccessMethod.Sequential), TestMethod]
suggéré
[DataSource ( "System.Data.OLEDB", "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " quoi mettre ici "; Propriétés étendues = \" Excel 8.0 \ "", "Sheet1 $", DataAccessMethod.Sequential), DeploymentItem ( "IHRM.Infrastructure.EFRepositories.Tests \ DataDriven.xls"), TestMethod]
La solution
Je doute que le JET OLEDB a sur le support de boîte pour la connexion à des bases de données à partir d'une des ressources incorporées. Je vois deux options pour contourner ce problème:
1. extraire la ressource
Dans votre test extraire la ressource d'assemblage à un endroit connu . Reportez-vous à cet endroit connu dans la chaîne de connexion JET. Nettoyer à nouveau le fichier extrait dans votre test ClassCleanup .
2. écrire votre propre source de données
peut être en mesure d'écrire votre propre DbProviderFactory qui prend en charge l'accès aux fichiers Excel intégré. Pour faire une telle usine découvrable pour MSTest, vous devrez enregistrer votre usine avec réflecteur et commencez à suivre la piste par dissassembling Microsoft.VisualStudio.TestTools.Utility.TestDataConnection.Create
.