Параллельное выполнение и MS Unit Test - PullRequest
1 голос
/ 23 ноября 2010

Среда здесь C # /. Net 4.

В моем проекте модульного тестирования MS Unit Test я тестирую фрагмент кода, который использует COM dll для некоторых вычислений преобразования даты (в свою очередь это использует некоторыедругие COM-библиотеки DLL, так что во всех трех COM-DLL участвуют).

При работе в обычной настройке приложения / службы у меня нет проблем, чтобы параллельное выполнение работало за счет использования связывания манифестовк идентификаторам сборки COM-библиотек, но при попытке сделать то же самое из моего проекта модульного тестирования я всегда получаю ошибку из-за исключений «класс не зарегистрирован».

Теперь я уже пробовал это:

  • Встраивание манифеста тестовой DLL
  • Вложение обоих манифестов тестовой DLL, манифесты COM библиотеки DLL + сами библиотеки COM *

Но безрезультатно.Поэтому я задаюсь вопросом: как я могу сделать так, чтобы среда модульного тестирования знала о соединении COM через манифесты?Мне кажется, что связывание манифеста DLL не совсем работает (манифесты EXE работают нормально), но обычно такие мысли равносильны тому, что делают что-то не так ...

Я обычно довольно успешен вВ поисках чего-то подобного, но на этом у меня было очень мало хитов, и ничего похожего на это, поэтому, пожалуйста, если у вас есть какие-либо мысли или предложения, поделитесь :) И если требуется уточнение, пожалуйста, дайте мне знать.

(Я знаю, что использования DLL-библиотек COM можно было бы избежать путем внедрения зависимостей в нужное место, но сейчас я хотел бы изучить этот случай, касающийся модульного тестирования бок о бокsetup).

С уважением

Jesper

1 Ответ

0 голосов
/ 24 ноября 2010

Я не знаком с модульным тестом MS, так что это всего лишь догадки.

При обычной настройке приложения вы ссылались на манифест COM-сервера через манифест приложения, поэтому общий "процесс"контекст активации "включает в себя правильные ссылки.

В сценарии модульного тестирования вы не управляете приложением, поэтому контекст активации процесса не имеет надлежащих ссылок.Вы встроили тестовый манифест dll в свою DLL, но все, что делает, если вы не выполняете дополнительную работу, это разрешает статические зависимости DLL от манифеста.Контекст активации манифеста не является «активным», когда ваш код DLL активен;Вы должны сами управлять этим контекстом, вручную создавая и активируя контекст вокруг ваших вызовов на COM-сервере.

Например, посмотрите на CSRegFreeCOMClient из проекта OneCode в CodePlex..

...