3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VisualStudio2012でテスト

Posted at

環境

Windows7 64bit版
Microsoft Visual Studio Professional 2012

テストの作成

UnitTestをインクルード/リンクしてdllを作ればやり方はなんでもよい。

  1. 「Win32コンソールアプリケーション」のプロジェクトを新規作成し、DLLを選択する。
  2. C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\UnitTest\include 以下のファイルをコピーしてプロジェクトへ追加。
    • CppUnitTest.h
    • CppUnitTestAssert.h
    • CppUnitTestCommon.h
    • CppUnitTestException.h
    • CppUnitTestLogger.h
      • Source.cppと同じ場所にコピーすればインクルードパスの設定は必要ない。
  3. C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\UnitTest\lib 以下のファイルをコピーしてプロジェクトへ追加。
    • amd64/Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib
    • arm/Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib
    • Microsoft.VisualStudio.TestTools.CppUnitTestFramework.lib
      • 「追加のライブラリディレクトリ」へ追加したディレクトリへのパスを追加。
      • 例えば、Source.cppと同じ場所に「lib」という名前のディレクトリを作成しそこへコピーした場合は「lib」と設定。
  4. Source.cppを以下のように修正(CppUnitTest.hのUSAGE EXAMPLEとほぼ同一)してビルド。
Source.cpp
# include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;


BEGIN_TEST_MODULE_ATTRIBUTE()
	TEST_MODULE_ATTRIBUTE(L"Date", L"2010/6/12")
END_TEST_MODULE_ATTRIBUTE()


TEST_MODULE_INITIALIZE(ModuleInitialize)
{
	Logger::WriteMessage("In Module Initialize");
}

TEST_MODULE_CLEANUP(ModuleCleanup)
{
	Logger::WriteMessage("In Module Cleanup");
}



TEST_CLASS(Class1)
{
public:
	Class1()
	{
		Logger::WriteMessage("In Class1");
	}
	~Class1()
	{
		Logger::WriteMessage("In ~Class1");
	}

  

	TEST_CLASS_INITIALIZE(ClassInitialize)
	{
		Logger::WriteMessage("In Class Initialize");
	}
	TEST_CLASS_CLEANUP(ClassCleanup)
	{
		Logger::WriteMessage("In Class Cleanup");
	}

	
	BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
        TEST_OWNER(L"OwnerName")
        TEST_PRIORITY(1)
	END_TEST_METHOD_ATTRIBUTE()

	TEST_METHOD(Method1)
	{   
		Logger::WriteMessage("In Method1");
        Assert::AreEqual(0, 0);
	}

	TEST_METHOD(Method2)
	{
		// 必ず失敗
		Assert::Fail(L"Fail");
	}
};

テストの実行

VisualStudioのメニューから「テスト」>「ウィンドウ」>「テストエクスプローラー」を選択すると、
以下のようなウィンドウが表示される。
未処理.png

「すべて実行」を選択すると、Method1とMethod2のテストが実行される。
結果は以下のように表示される。

実行済み.png

64ビットテストを32ビットプロセスで実行することはできません。

64ビットのアプリをテストした際に上記のように警告が出てしまう場合は、
メニューの「テスト」>「テスト設定」>「既定のプロセッサアーキテクチャ」>「x64」
を選択すれば実行可能になる。

テストの実行(コンソール)

バッチファイルを実行して環境変数を設定し、vstest.console.exe を実行する。
x64の場合、 /Platform:x64 と指定する。

> "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat"
> vstest.console.exe /Platform:x86 /InIsolation ConsoleApplication1.dll
  • /Platform
    • プラットフォームの種類。 x64/x86/ARM がある。
  • /InIsolation
    • 分離プロセスでテスト。警告が出ていたので指定。
  • ConsolaApplication1.dll
    • テスト対象。

コンソールでのテスト実行結果

コンソール失敗.png

テストが成功するようにするには、
Source.cppの61行目をコメントアウトし、再度ビルド&テスト。

Source.cpp
TEST_METHOD(Method2)
{
    // 必ず失敗
    //Assert::Fail(L"Fail");
}

コンソール成功.png

参考

VSTest.Console.exe のコマンド ライン オプション

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?