ЗАДНИЙ ПЛАН
- Я автоматизирую PowerPoint 2007 через С#
- Я пишу модульные тесты, используя встроенное модульное тестирование Visual Studio (Microsoft.VisualStudio.TestTools.UnitTesting) для своего кода.
- У меня достаточно опыта в автоматизации приложений Office 2007.
МОЯ ПРОБЛЕМА
- Когда я запускаю свои модульные тесты, первый метод модульного тестирования работает нормально, все последующие имеют ошибку, связанную с отсоединенным RCW.
- Я создаю статический экземпляр PowerPoint для совместного использования методов тестирования, но кажется, что приложение 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 (когда я устанавливаю свойство Visible)
ЧТО Я ПРОБОВАЛА
- Порядок юнит-тестов не меняет поведение
- Та же проблема возникает с Word 2007, Visio 2007 и т. д.
- При написании тестов с NUNIT у меня не возникает этой проблемы - очевидно, что-то отличается от того, как Visual Studio запускает модульные тесты (не подразумевается, что VS неверен, просто указывает, что он отличается от NUNIT)
- Это не имеет ничего общего со свойством Visible — любое использование метода или свойства вызовет эту проблему.
- Я пытался использовать атрибуты AssemblyInitialize и ClassInitialize для создания экземпляра, но ничего не сработало.
- Googled & Binged - нет четкого ответа, который мне поможет
КОММЕНТАРИИ
- Я мог бы переключиться на NUNIT, но предпочел бы продолжать использовать собственную среду модульного тестирования Visual Studio.
МОЙ ВОПРОС
- Как я могу успешно создать один экземпляр PowerPoint 2007, который будет использоваться всеми TestMethods
- Если вы можете объяснить, почему это происходит, я был бы признателен.
РЕШЕНО (СПАСИБО ALCONJA)
- Я последовал его совету, чтобы изменить .testrunconfig, и это сработало.