[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



  • Assert 類別