Использование MSTest с MFC - PullRequest
2 голосов
/ 02 мая 2009

Кто-нибудь использует MSTest для тестирования кода MFC?

Я создал управляемый проект C ++ Test и могу писать в нем модульные тесты, но как только я #include <afxwin.h>, у меня возникают проблемы. Код скомпилируется, и когда он запускает тесты, пользовательский интерфейс зависает, и ни один из символов не загружается. Вы также не можете отлаживать тесты. Если я удалю #include, то тесты пройдут успешно. Есть идеи?

Он компилируется с / clr с многопоточной отладкой (/ mtd) и использует MFC через общую DLL. Если я выберу статическую ссылку на MFC, то компилятор (VSVC9.0) скажет мне, что / clr и / mtd несовместимы.

Кроме того, вы думаете, что добавление DependencyInput к тестам исправит это? Я попытался добавить некоторые библиотеки MFC в качестве входных данных зависимости, но это не помогло. Я мог бы сделать это неправильно, хотя.

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

На работе, используя Visual Studio 2010, мы успешно создали управляемый тестовый проект C ++ для тестирования кода MFC.

Мы начали создавать тестовый проект на С ++ с помощью мастера. Затем в свойствах конфигурации проекта модульного тестирования измените следующее:

  • General-> Use MFC = изменено на «Использовать MFC в общей DLL»
  • Общее-> Поддержка общего языка во время выполнения = изменено на "Поддержка общего языка (/ clr)
  • (только в конфигурации отладки) Linker-> Output-> Ignore Specific Default Libraries = add MSVCRT

В stdafx.h: у меня есть следующее

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER              // Allow use of features specific to Windows XP or later.
#define WINVER 0x0501       // Change this to the appropriate value to target other versions of Windows.
#endif

#ifndef _WIN32_WINNT        // Allow use of features specific to Windows XP or later.                   
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif                      

#ifndef _WIN32_IE           // Allow use of features specific to IE 6.0 or later.
#define _WIN32_IE 0x0600    // Change this to the appropriate value to target other versions of IE.
#endif

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h>         // MFC OLE classes
#include <afxodlgs.h>       // MFC OLE dialog classes
#include <afxdisp.h>        // MFC Automation classes
#endif // _AFX_NO_OLE_SUPPORT

#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h>          // MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT

#include <afxdtctl.h>       // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>         // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

И все работает как шарм! Дайте мне знать, если это работает для вас

0 голосов
/ 02 мая 2009

Это то же самое из командной строки?

Не сделал этого. Но можно ли создать статическое окно? проверьте процесс msest с помощью проводника процессов.

...