none
Problème de deploiement dans des tests unitaires RRS feed

  • Question

  • Bonjour,

    J'ai un petit souci de deploiement de fichier dans des test unitaires.
    L'application qui est testée doit être "initialisée" avant l'exécution de certains test. Pour réaliser ceci je voudrais utiliser ce qui est prévu à savoir l'attribut "AssemblyInitialize" et écrire donc:

    	[TestClass()]
    	public class InitializeTest
    	{
    		[AssemblyInitialize()]
    		public static void AssemblyInitialize(TestContext context)
    		{
    			TestedApplication.Initialize();
    		}
    	}
    Mon problème est que la fonction appelée ici à besoin d'accéder à un fichier de données qui doit être dans un sous répertoire de l'appli.
    Je pensais donc ajouter un "DeploymentItem" à ma fonction initialize:

    		[AssemblyInitialize()]
    		[DeploymentItem(@"Data\File.xml", "Data")]
    		public static void AssemblyInitialize(TestContext context)
    		{
    			...
    		}
    
    Or, il semblerait que l'attribut de déploiement ne soit pas pris en compte sur la methode marquée AssemblyInitialize.

    J'ai voulu contouner ce problème en utilisant le fichier testrunconfig, mais je n'ai pas réussi à deployer mon fichier de données dans un sous-répertoire...

    Toute idée sera donc la bienvenue.


    J







    mercredi 25 novembre 2009 15:46

Réponses

  • Bonjour,

    DeployItemAttribute ne fonctionne qu'avec les méthodes de tests (marquées avec TestMethod) ou au niveau de la classe (contenant les méthodes de test).

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 3 décembre 2009 22:46
    Modérateur
  • Bonjour,

    Une solution c'est de déployer à "la main" vos fichiers en plaçant votre code dans la méthode AssemblyInitialize(). Il vous faudra utiliser en dur le répertoire où se trouve le fichier source, mais vous pouvez palier à ce problème en utilisant des variables d'environnement.
    Sinon, n'hésitez pas à soumettre une suggestion auprès de microsoft sur : http://connect.microsoft.com/

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 6 décembre 2009 11:11
    Modérateur
  • Une solution c'est de déployer à "la main" vos fichiers

    Ok, j'applique cette solution, en faisant ma fonction capable d'aller chercher un DeploymentItemAttribute et de copier le(s) fichier(s) spécifié(s) dans l'attibut. J'appellerai cette fonction explicitement dans ma methode AssemblyInitialize().

    Je trouve juste dommage, que cette fonction (forcément implémentée dans Microsoft.QualityTools) ne soit pas publique ou appelée sur toutes les méthodes liées aux tests.

    En tout cas, merci pour tout .

    Jérôme



    lundi 7 décembre 2009 16:50

Toutes les réponses

  • Bonjour,

    Est-ce que au moment de la compilation votre fichier File.xml se trouve bien dans le répertoire de sortie bin\Debug\Data\File.xml. ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mardi 1 décembre 2009 22:21
    Modérateur
  • Oui, il s'y trouve bien.
    jeudi 3 décembre 2009 08:28
  • Bonjour,

    DeployItemAttribute ne fonctionne qu'avec les méthodes de tests (marquées avec TestMethod) ou au niveau de la classe (contenant les méthodes de test).

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    jeudi 3 décembre 2009 22:46
    Modérateur
  • Bonjour,

    C'est exactement la source de mon problème: le DeploymentItemAttributte n'est pas pris en compte sur la méthode "AssemblyInitialize"....
    Par contre je ne savias pas qu'on pouvait le mettre sur la classe une classe contenant des tests.
    Avec cette information j'ai essayé une autre solution (qui me parraissait bancale dès le départ) .....et qui ne marche pas non plus:

    [TestClass()]
    [DeploymentItem(@...........)]
    public sealed class Initialize
    {
    	[AssemblyInitialize()]
    	public static void AssemblyInitialize(TestContext context)
    	{
    		//mes init ici
    } [TestMethod()] public void FakeForDeployment() { } }
    J'ajoute un test qui ne sert à rien dans ma classe contenant la methode "AssemblyInitialize" et je mets le "DeployementItem" sur la classe.

    Je pense que je ne dois pas être le seul au monde à avoir besoin d'utiliser un "AssemblyInitialize" et à avoir besoin qu'un fichier soit déployé avant l'appel à cette méthode. Je pense donc que le framework de test unitaire permet certainement de faire ca, mais je ne vois pas comment.....

    En attendant de trouver, je vais mettre le deployment item sur toutes mes classes contenant des tests, mais ceci n'est ni très pratique, ni très viable à long terme.

    Si vous avez une autre idée, je prends !


    J












    vendredi 4 décembre 2009 10:34
  • Bonjour,

    Une solution c'est de déployer à "la main" vos fichiers en plaçant votre code dans la méthode AssemblyInitialize(). Il vous faudra utiliser en dur le répertoire où se trouve le fichier source, mais vous pouvez palier à ce problème en utilisant des variables d'environnement.
    Sinon, n'hésitez pas à soumettre une suggestion auprès de microsoft sur : http://connect.microsoft.com/

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 6 décembre 2009 11:11
    Modérateur
  • Une solution c'est de déployer à "la main" vos fichiers

    Ok, j'applique cette solution, en faisant ma fonction capable d'aller chercher un DeploymentItemAttribute et de copier le(s) fichier(s) spécifié(s) dans l'attibut. J'appellerai cette fonction explicitement dans ma methode AssemblyInitialize().

    Je trouve juste dommage, que cette fonction (forcément implémentée dans Microsoft.QualityTools) ne soit pas publique ou appelée sur toutes les méthodes liées aux tests.

    En tout cas, merci pour tout .

    Jérôme



    lundi 7 décembre 2009 16:50
  • Bonjour,

    N'hésitez pas à sousmettre une suggestion auprès de Microsoft sur : http://connect.microsoft.com/

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mardi 8 décembre 2009 21:25
    Modérateur