Модульный тест C # — работает нормально
Я прочитал документацию по модульному тесту MSTest (совершенно бесполезную) на веб-сайте Microsoft: совершенно бесполезный-мс-док-ссылка. Затем я прочитал целый ряд других полезных ссылок (например, на SO) и, наконец, я могу запустить C # модульные тесты без проблем, вот так:
mstest /testcontainer:UnitTest.dll /detail:errormessage
Модульный тест C ++ — Сбой
Насколько я могу судить, это должно быть то же самое для модульных тестов C ++, поэтому я выполнил аналогичную команду (подробные сведения о команде в конце) для C ++, но затем я получил ошибку:
UnitTest_TrackManager.dll Невозможно загрузить тестовый контейнер
‘UnitTest_TrackManager.dll’ или одна из его зависимостей. Если вы строите
Сборка вашего тестового проекта как 64-битная сборка не может быть загружена.
При сборке тестового проекта выберите «Любой ЦП» для
Платформа. Чтобы запустить ваши тесты в 64-битном режиме на 64-битном процессоре, вам нужно
необходимо изменить настройки теста на вкладке «Хосты», чтобы запустить тесты в
32-битный процесс. Сведения об ошибке: не удалось загрузить файл или сборку
‘Файл: /// D: \ MiddlewareTest01 \ x64 \ Debug \ UnitTest_TrackManager.dll’
или одна из его зависимостей. Модуль должен был содержать
сборочный манифест.
32-битная или 64-битная DLL?
Итак, честно говоря, я создал код для 64-разрядных, а MStest только 32-разрядный. я использовал dumpbin /HEADERS fname.dll
чтобы проверить, что это 64-битный файл и он:
File Type: DLL
FILE HEADER VALUES
8664 machine (x64)
D number of sections
5829E628 time date stamp Mon Nov 14 16:28:24 2016
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
2022 characteristics
Executable
Application can handle large (>2GB) addresses
DLL
Итак, я перекомпилирую для 32-битной и снова запустить тест, но я получаю ту же ошибку. Поэтому я проверяю, что выходной файл (DLL) является 32-разрядным, и он выглядит так, вот для этого есть свалка:
File Type: DLL
FILE HEADER VALUES
14C machine (x86)
C number of sections
5829E792 time date stamp Mon Nov 14 16:34:26 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL
Модульный тест C ++ работает в IDE
Используя MSVS2015 IDE, я могу скомпилировать и запустить мой код / модульные тесты, и все они работают (когда я использую сборку x86) — и все они проходят. Если я выбираю x64 build, то он жалуется.
Конкретная команда, которая терпит неудачу
Вот точная командная строка, которую я использую:
mstest /testcontainer:UnitTest_TrackManager.dll /detail:errormessage
Он запускается из того же места, где живет DLL, который находится здесь:
D:\<somepath>\MiddlewareTest01\Debug\UnitTest_TrackManager.dll
куда <somepath>
просто чтобы скрыть информацию о моем ПК / пользователе и MiddlewareTest01
это папка решения.
Как я уже сказал, я могу заставить это работать для проектов C #, но для C ++ это, кажется, не работает таким же образом.
Обновить
Используя зависимость, он говорит мне:
MICROSOFT.VISUALSTUDIO.TESTTOOLS.CPPUNITTESTFRAMEWORK.DLL
не был найден. Может ли это быть проблемой?
Задача ещё не решена.
Других решений пока нет …