2017-08-30 13 views
0

OK. Donc, voici où je suis. J'utilise Specflow 2.2.0 pour coupler les tests unitaires automatisés avec notre effort de test CodedUI. Je suis en train de développer un plugin pour ajouter l'attribut CodedUI Test aux tests Specflow Feature et je rencontre des problèmes. Specflow ne reconnaît pas mon plugin pour générer l'attribut de test CodedUI pour les fichiers de caractéristiques Specflow et je ne comprends pas pourquoi parce que j'ai suivi toutes les instructions dans la documentation ainsi que d'autres plugins sur GitHub pour m'assurer que je le fais correctement. J'ai le plugin dans son propre projet de bibliothèque de classes et lors de la construction de ses autocopies dll dans le dossier packages dans la solution où se trouve Specflow. J'ai les fichiers d'assemblage édités pour pointer vers le générateur. J'ai les initialiseurs pour l'eventhandler. J'ai tout dans l'app.config de mon projet CodedUI correct autant que je peux dire et j'ai toujours des erreurs. Voici tout ce que j'ai en ce qui concerne le plug-in et les autres éléments pertinents:Le plugin Genered CodedUI Generator ne génère pas de fichiers de fonction

Voici le code de mon plugin qui initialise la classe IGenerator:

namespace SpecflowCUITPluginLib 
{ 
    public class CodedUiPlugin : IGeneratorPlugin 
    { 
        public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters) 
        { 
            generatorPluginEvents.CustomizeDependencies += this.GeneratorPluginEventsOnCustomizeDependencies; 
        } 
        private void GeneratorPluginEventsOnCustomizeDependencies(object sender, CustomizeDependenciesEventArgs customizeDependenciesEventArgs) 
        { 
            string unitTestProviderName = 
              customizeDependenciesEventArgs.SpecFlowProjectConfiguration.SpecFlowConfiguration.UnitTestProvider; 
            if (unitTestProviderName.Equals("mstest", StringComparison.InvariantCultureIgnoreCase) 
              || unitTestProviderName.Equals("mstest.2010", StringComparison.InvariantCultureIgnoreCase)) 
            { 
                customizeDependenciesEventArgs.ObjectContainer.RegisterTypeAs<CodedUIGeneratorProvider, IUnitTestGeneratorProvider>(); 
            } 
        } 
        #region IGeneratorPlugin Members 
        public void RegisterConfigurationDefaults(TechTalk.SpecFlow.Generator.Configuration.SpecFlowProjectConfiguration specFlowConfiguration) { } 
        public void RegisterCustomizations(BoDi.ObjectContainer container, TechTalk.SpecFlow.Generator.Configuration.SpecFlowProjectConfiguration generatorConfiguration) 
        { 
            container.RegisterTypeAs<CodedUIGeneratorProvider, IUnitTestGeneratorProvider>(); 
            container.RegisterTypeAs<MsTest2010RuntimeProvider, IUnitTestRuntimeProvider>(); 
        } 
        public void RegisterDependencies(BoDi.ObjectContainer container) { } 
        #endregion 
    } 
} 

Voici le code de mon fournisseur de générateur qui est situé dans un fichier séparé .cs:

namespace SpecflowCUITPluginLib 
{ 

    public class CodedUIGeneratorProvider : MsTest2010GeneratorProvider 
    { 
        public CodedUIGeneratorProvider(CodeDomHelper codeDomHelper) 
            : base(codeDomHelper) { } 
        private const string TestClassAttribute = @"Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute"; 
        private const string CodedUiTestClassAttribute = @"Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute"; 
        private const string DeploymentItemAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute"; 
        public override void SetTestClass(TestClassGenerationContext generationContext, string featureTitle, string featureDescription) 
        { 
            base.SetTestClass(generationContext, featureTitle, featureDescription); 
            foreach (CodeAttributeDeclaration declaration in generationContext.TestClass.CustomAttributes) 
            { 
                if (declaration.Name == TestClassAttribute) 
                { 
                    generationContext.TestClass.CustomAttributes.Remove(declaration); 
                    break; 
                } 
            } 
            generationContext.TestClass.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(CodedUiTestClassAttribute))); 
            string filename = new Uri(this.GetType().Assembly.CodeBase).LocalPath; 
            // Add deployment item in each test for the driver. 
            generationContext.TestClass.CustomAttributes.Add(
                new CodeAttributeDeclaration(
                    new CodeTypeReference(DeploymentItemAttribute), 
                    new CodeAttributeArgument(new CodePrimitiveExpression("SpecflowCUITPluginLib.SpecFlowPlugin.dll")))); 
        } 
    } 
} 

Voici la ligne que j'ajouté au fichier de montage:

[assembly: GeneratorPlugin(typeof(CodedUiPlugin))] 

Here is a screencap of my build settings for the plugin project

Et voici mon app.config de mon projet CodedUI

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
  <configSections> 
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" /> 
  </configSections> 
  <specFlow> 
    <unitTestProvider name="MsTest" /> 
    <plugins> 
      <add name="SpecflowCUITPluginLib.SpecflowPlugin" path=".\MedchartUITesting\packages\specflow2.2.0\tools" type="Generator" /> 
    </plugins> 
  </specFlow> 
</configuration> 

Et peu importe ce que je fais je reçois cette erreur pour mes fichiers de fonction: #error Generation error: Unable to find plugin in the plugin search path: SpecflowCUITPluginLib.SpecflowPlugin. Please check http://go.specflow.org/doc-plugins for details.

Quelqu'un voit une solution ou C'est un problème parce que je ne sais vraiment pas où je devrais trouver une solution.

Répondre