平常 C++ 的開發工具是 Microsoft Visual Studio,然後現在的測試框架是使用 Google Test,以前都是一邊寫,一邊手動執行 test case 來驗證,沒有辦法跟 VS 內建的 Test Explorer 做整合,真的蠻原始的 =.=
最近因為 TDD 的關係,這樣子的開發環境真的太鳥了,所以認真研究了一下解決方案,發現了 Google Test Adapter 這個好東西:
https://github.com/csoltenborn/GoogleTestAdapter
很簡單,照著 github 上的說明安裝完後就可以使用。幾個要注意調整的地方:
- 原本它會搜尋結尾為 test / tests 的執行檔來分析裡面的 test case,所以如果你的 Unit Test 程式不是 xxxTest.exe 的話,請記得到 [TOOLS] –> [Option] –> [Google Test Adapter] –> [General] ,裡面有一個 Regex for test discovery,我是使用 UT_[w]*.exe
- 在同一頁中還有一個 Working directory & PATH extension,如果你的執行環境不是在預設的 output directory,也請記得修改。
這樣子基本上就可以跑了,而且只要程式碼有重新編譯,它就會自動幫你跑一次 test case(Run Tests After Build 記得勾起來) 但還有幾個小問題:
- 修改 Unit Test Project 會自動跑 test case,但修改原本的 project 並不會被偵測到
- 希望可以每次存檔後,就自動 Build & Test ,這樣只要專注綠燈/紅燈就好了。
這個問題我是參考 http://stackoverflow.com/questions/33234498/automatically-build-after-save-for-visual-studio-2015,用 Visual Commander 來解決:多加一個 Visual Commander Extension
public class E : VisualCommanderExt.IExtension
{
public void SetSite(EnvDTE80.DTE2 DTE_, Microsoft.VisualStudio.Shell.Package package)
{
DTE = DTE_;
events = DTE.Events;
documentEvents = events.DocumentEvents;
documentEvents.DocumentSaved += OnDocumentSaved;
}
public void Close()
{
documentEvents.DocumentSaved -= OnDocumentSaved;
}
private void OnDocumentSaved(EnvDTE.Document doc)
{
if(doc.Language == “C/C++”)
{
DTE.ExecuteCommand(“Build.BuildSolution”);
DTE.ExecuteCommand(“Test.RunAllTestsInSolution”);
}
}
private EnvDTE80.DTE2 DTE;
private EnvDTE.Events events;
private EnvDTE.DocumentEvents documentEvents;
}
完工,現在只要存檔,就會自動 Build,並且在 Test Explorer 看到紅燈綠燈了