Question

CONTEXTE

  • Je suis un PowerPoint 2007 AUTOMATISATION DE via C #
  • Je suis en train d'écrire unittests en utilisant les tests unitaires intégré de Visual Studio (Microsoft.VisualStudio.TestTools.UnitTesting) pour mon code
  • Je suis relativement bien connu dans l'automatisation des applications Office 2007

MON PROBLÈME

  • Quand je lance mes tests unitaires, la première méthode de test unitaire fonctionne bien, tout après avoir une erreur au sujet d'un RCW détaché
  • Je suis en train de créer une instance statique de PowerPoint pour les méthodes d'essai à partager, mais il semble que l'application BRF se détache après la première méthode de test est exécuté

CODE SOURCE

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    namespace TestDemo
    {



        [TestClass]
        public class UnitTest1
        {
            private static Microsoft.Office.Interop.PowerPoint.ApplicationClass 
              g_app = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();

            private TestContext testContextInstance;

            public TestContext TestContext
            {
                get
                {
                    return testContextInstance;
                }
                set
                {
                    testContextInstance = value;
                }
            }



            [TestMethod]
            public void Test01()
            {
                g_app.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
            }

            [TestMethod]
            public void Test02()
            {
                g_app.Visible = Microsoft.Office.Core.MsoTriState.msoCTrue;
            }
        }

    }

Le message d'erreur

Test method TestDemo.UnitTest1.Test02 threw exception:
System.Runtime.InteropServices.InvalidComObjectException: COM 
object that has been separated from its underlying RCW cannot be used..

Ce message apparaît sur la ligne où l'instance PowerPoint est utilisé (quand je défini la propriété Visible)

Ce que je tente

  • L'ordre des unittests ne change pas le comportement
  • Le même problème se produit avec Word 2007, Visio 2007, etc.
  • Lors de l'écriture avec testcases NUnit Je ne comprends pas ces problèmes - de toute évidence quelque chose est différent de la façon dont le studio visuel exécute des tests unitaires (non ce qui implique VS est incorrect, tout en soulignant qu'il est différent de NUnit)
  • Il n'a rien à voir avec la propriété Visible - toute utilisation d'une méthode ou une propriété provoquera ce problème
  • Je l'ai essayé d'utiliser les attributs AssemblyInitialize et ClassInitialize pour créer l'instance, mais rien n'a fonctionné
  • googlé & Binged - pas de réponse claire qui me aide

COMMENTAIRES

  • Je pourrais passer à NUnit, mais préférerais continuer à utiliser le cadre de test unitaire natif de Visual Studio

MA QUESTION

  • Comment puis-je créer avec succès une instance unique de PowerPoint 2007 qui sera partagé entre tous les TestMethods
  • Si vous pouvez donner un aperçu pourquoi ce qui se passe, je vous serais reconnaissant.

RESOLU (MERCI À ALCONJA)

  • J'ai suivi ses conseils pour modifier le .testrunconfig et cela a fonctionné.

LIENS

Était-ce utile?

La solution

On dirait que le problème est que l'unité MS Exécuter les tests dans plusieurs threads alors que les tests NUnit exécuté dans le même fil. Ainsi, la référence statique à PowerPoint lors de l'exécution dans vos tests de MS est partagé entre les threads , qui COM n'aime pas depuis par défaut son STA (à un seul thread). Vous pouvez passer test de MS à utiliser MTA (multi-threading pour COM) en ajoutant:

<ExecutionThread apartmentState="MTA" />

à votre fichier * .testrunconfig (ouvrir le fichier au format XML et mandrin la ligne ci-dessus partout dans le nœud principal de TestRunConfiguration ) .

Je ne sais pas comment PowerPoint (et vos tests spécifiques) traitera d'être traités comme étant multi-thread, mais votre exemple trivial passe au-dessus avec MTA activé. Si vous obtenez des problèmes threading se produisent, vous pouvez essayer de faire vos tests unitaires commandé et voir si cela résout le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top