2

MSTest を使用して MFC コードをテストする人はいますか?

マネージ C++ テスト プロジェクトを作成し、その中に単体テストを記述できますが、一度#include <afxwin.h>問題が発生します。コードがコンパイルされ、テストが実行されると、UI がハングし、シンボルが読み込まれなくなります。テストをデバッグすることもできません。を削除する#includeと、テストは正常に実行されます。何か案は?

マルチスレッド デバッグ (/mtd) を使用して /clr でコンパイルし、共有 dll を介して MFC を使用しています。MFC に静的にリンクすることを選択した場合、コンパイラ (VSVC9.0) は /clr と /mtd に互換性がないことを通知します。

また、テストに DependencyInput を追加すると、これが修正されると思いますか? いくつかの MFC dll を依存関係の入力として追加しようとしましたが、役に立ちませんでした。私はそれを間違っているかもしれません。

ありがとう。

4

2 に答える 2

1

職場では、Visual Studio 2010 を使用して、マネージド C++ テスト プロジェクトを作成し、mfc コードをテストすることに成功しました。

ウィザードを使用して C++ テスト プロジェクトの作成を開始しました。次に、単体テスト プロジェクトの構成プロパティで、次のように変更します。

  • 一般 -> MFC の使用 = 「共有 DLL で MFC を使用する」に変更
  • 一般 -> 共通言語ランタイム サポート = 「共通言語サポート (/clr)」に変更
  • (デバッグ構成のみ) Linker->Output->Ignore Specific Default Libraries = 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

そして、すべてが魅力のように機能します!それがあなたのために働くかどうか私に知らせてください

于 2011-10-17T13:44:07.350 に答える
0

コマンドラインから同じですか?

これはしていません。しかし、静的ウィンドウが作成されている可能性はありますか? プロセス エクスプローラーで msest プロセスを確認します。

于 2009-05-01T23:25:36.160 に答える