[C++][Visual Studio]Natived C++使用Visual Studio做單元測試

[C++][Visual Studio]Natived C++使用Visual Studio做單元測試

筆者在前面[C++]使用靜態函式庫(Static Library)開出類別給其他組件使用這篇帶出了如何將C++的類別開出給其他組件使用,這篇將延伸該篇概念,示範如何針對Natived C++去做Visual Studio的單元測試。

 

為了方便測試,這邊將[C++]使用靜態函式庫(Static Library)開出類別給其他組件使用這篇的範例程式改了一下,將本來的Test方法改為Add方法,其功能為將兩個數值相加後回傳。

image

 

接著為方案加入Test Project。

image

 

再來可參閱[C++]使用靜態函式庫(Static Library)開出類別給其他組件使用這篇,設定測試專案的屬性,讓測試專案得以引用要測試的組件。

image

image

 

都設定完後就可以在測試專案中撰寫測試程式了 ,測試程式的撰寫方式跟一般的.NET程式無太大的差異,惟需注意的是撰寫測試程式所用到的Assert主要是Managed的類別,整個測試專案也是C++/CLI類型的專案,因此若想要判別的結果其型態非Managed與Natived共用的話,我們必須將Natived的型態的資料轉為Managed型態的資料,再將其帶入Assert去比對。

#include "stdafx.h"
#include "MyClass.h"
...
namespace MyDllTest
{
	[TestClass]
	public ref class UnitTest1
	{
	...
		[TestMethod]
		void Add_AddTwoValue_ReturnAddedValue()
		{			
			//Arrange		
			int x = 1;
			int y = 2;
			int actual;
			int expected = x + y;
			MyClass myObj;
			
			//Act
			actual = myObj.Add(x, y);	

			//Assert
			Assert::AreEqual(actual, expected);		
		};
	};
}

 

因為這邊示範的是int型態,int型態為Natived與Managed共用的型態,因此這邊可以直接帶入使用,若型態是用std::string的話,就必須要像下面這樣轉換。

...
System::String^ GetManagedString(string nativedString)
{
	return %System::String(nativedString.c_str());
}
...
Assert::AreEqual(GetManagedString(actual),GetManagedString(expected));

 

除了在比對上要特別留意外,其他的部分像是如何進行測試與單元測試的管理都跟Managed的單元測試大同小異,這邊不對此多做說明。

image

image

 

Link