Frage

HINTERGRUND

  • Ich bin eine Powerpoint 2007 über C # Automatisierung
  • Ich Unittests mit dem Einbaugerät Testen von Visual Studio (Microsoft.VisualStudio.TestTools.UnitTesting) für meinen Code
  • Schreiben
  • Ich bin gut relativ erlebt die Office 2007-Anwendungen in der Automatisierung

MY PROBLEM

  • Wenn ich meine Unit-Tests laufen, die erste Einheit Testverfahren läuft gut, alle danach einen Fehler haben über eine freistehende RCW
  • Ich bin eine statische Instanz von Powerpoint zu schaffen für die Testmethoden zu teilen, aber es scheint, wie die Anwendung RCW abgenommen zu werden, nachdem die erste Testmethode ausgeführt wird,

THE SOURCE CODE

    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;
            }
        }

    }

Die Fehlermeldung

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

Diese Meldung auf der Linie kommt, wo die Powerpoint-Instanz verwendet wird (wenn ich die Visible-Eigenschaft)

Was ich versucht habe,

  • Die Reihenfolge der Unittests das Verhalten nicht ändern
  • Das gleiche Problem tritt bei Word 2007, Visio 2007, etc.
  • Wenn Testfälle mit NUnit Schreiben bekomme ich diese Problem nicht - offensichtlich ist etwas anderes, wie Visual Studio läuft Unit-Tests (nicht impliziert VS falsch ist, nur den Hinweis auf sie unterscheidet sich von NUnit)
  • Es hat nichts mit der Eigenschaft Visible zu tun - jede Nutzung einer Methode oder Eigenschaft bewirkt, dass dieses Problem
  • Ich habe versucht, die Attribute AssemblyInitialize und ClassInitialize mit der Instanz zu erstellen, aber nichts hat funktioniert
  • gegoogelt & Binged - keine klare Antwort, die mir hilft,

KOMMENTAR

  • ich NUnit wechseln könnte, aber würde es vorziehen, Visual Studio native Unit-Test-Framework
  • zu halten mit

Meine Frage

  • Wie kann ich erfolgreich eine einzelne Instanz von Powerpoint 2007 erstellen, die unter allen Testmethoden geteilt werden
  • Wenn Sie einen Einblick geben, können Warum dies geschieht, wäre ich dankbar.

GELÖST (DANK ALCONJA)

  • Ich folgte seinem Rat die .testrunconfig zu ändern und es funktionierte.

LINKS

War es hilfreich?

Lösung

Sieht aus wie das Problem ist, dass MS-Einheit in mehreren Threads durchgeführten Tests während NUnit im selben Thread laufen Tests. So ist der statische Bezug auf Powerpoint, wenn in Ihren MS-Tests ausgeführt wird, wobei zwischen Threads gemeinsam genutzt , die COM da seine standardmäßig nicht wie STA (single threaded). Sie können MS-Testschalter MTA (Multi-Threading für COM) zu verwenden, durch Hinzufügen:

<ExecutionThread apartmentState="MTA" />

Ihre * .testrunconfig-Datei (die Datei als XML öffnen und die obige Zeile chuck überall in Haupt des TestRunConfiguration Knoten ) .

Nicht sicher, wie gut Powerpoint (und spezifische Tests) mit, das behandelt wird als multi-threaded sein befassen wird, aber Ihr triviales Beispiel oben geht mit MTA eingeschaltet. Wenn Sie Threadingprobleme tun bekommen auftreten, könnten Sie versuchen, Ihre Unit-Tests machen bestellt & ob das das Problem behebt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top