문제

배경

  • C#을 통해 PowerPoint 2007을 자동화하고 있습니다.
  • 내 코드에 대한 Visual Studio (Microsoft.visualstudio.testTools.Unittesting)의 내장 단위 테스트를 사용하여 UnitTests를 작성하고 있습니다.
  • 나는 사무실 2007 앱을 자동화하는 데 상대적으로 경험이 풍부합니다.

내 문제

  • 단위 테스트를 실행하면 첫 번째 단위 테스트 방법이 잘 실행됩니다. 그 후 분리 된 RCW에 대한 오류가 있습니다.
  • 테스트 방법을 공유 할 수있는 정적 인 인스턴스를 만들고 있지만 첫 번째 테스트 방법이 실행 된 후 RCW가 분리되는 것처럼 보입니다.

소스 코드

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

    }

오류 메시지

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

이 메시지는 PowerPoint 인스턴스가 사용되는 줄에 제공됩니다 (가시 속성을 설정할 때)

내가 시도한 것

  • UnitTests의 순서는 동작을 변경하지 않습니다.
  • Word 2007, Visio 2007 등과 동일한 문제가 발생합니다.
  • Nunit으로 테스트 케이스를 작성할 때 나는 이러한 문제를 얻지 못합니다. 분명히 비주얼 스튜디오가 단위 테스트를 실행하는 방법에 대해서는 분명히 다른 것입니다 (vs를 의미하지는 않지만 Nunit과 다릅니다).
  • 눈에 보이는 속성과는 아무런 관련이 없습니다. 방법이나 속성의 사용 이이 문제를 일으킬 것입니다.
  • 나는 인스턴스를 만들기 위해 Assemblesyinitialize 및 분류 성분을 사용하려고 시도했지만 아무것도 작동하지 않았습니다.
  • Googled & Binged- 나를 돕는 명확한 대답 없음

코멘트

  • 나는 Nunit으로 전환 할 수 있지만 Visual Studio의 기본 유닛 테스트 프레임 워크를 계속 사용하는 것을 선호합니다.

내 질문

  • 모든 테스트 메드 중에서 공유 될 PowerPoint 2007의 단일 인스턴스를 성공적으로 만들 수 있습니까?
  • 통찰력을 제공 할 수 있다면 이런 일이 일어나고 있습니다. 감사 할 것입니다.

해결 된 (알코자 덕분에)

  • 나는 그의 조언을 따라 .testrunconfig를 수정하고 효과가 있었다.

연결

도움이 되었습니까?

해결책

문제는 MS 장치 테스트가 여러 스레드에서 실행되는 반면 Nunit 테스트는 동일한 스레드에서 실행됩니다. 그래서 MS 테스트에서 실행할 때 PowerPoint에 대한 정적 참조는 다음과 같습니다. 스레드간에 공유되고 있습니다, Com은 기본적으로 STA (단일 스레드) 이후로 마음에 들지 않습니다. MS 테스트를 전환하여 다음을 추가하여 MTA (COM 용 멀티 스레딩)를 사용할 수 있습니다.

<ExecutionThread apartmentState="MTA" />

*.testrunconfig 파일에 (파일을 XML로 열고 위의 줄을 chuck합니다. 메인 어디에서나 TestRunConfiguration 마디).

PowerPoint (& 귀하의 특정 테스트)가 멀티 스레드로 취급되는 것을 얼마나 잘 처리할지 확실하지 않지만 위의 사소한 예는 MTA를 켜고 통과합니다. 스레딩 문제가 발생하면 단위 테스트 주문 & 그것이 문제를 해결하는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top