2016-02-26 90 views
0

使用:MSTest的/的CppUnit/TFS2015/VS2013/C++「斷言失敗」的消息不完全使用的CppUnit和TFS2015

我調試運行在本地罰款和失敗構建機器上(我沒有測試可使用)。今天早上我坐下來,幾乎所有的測試都通過了 - 除了一次。測試恰好是比較兩個相當大的字符串,並且(通常)非常有幫助的Assert failed. Expected:<...從未將它放到Actual:<...部分,因爲字符串太長。這只是一個簡單的:Assert::AreEqual(expectedStr, actualStr);

現在我的解決方法是將文件寫入到我可以從測試中訪問的網絡路徑(這已經是一種集成類型測試,但幸運的是 - 但仍然...)。噢 - 我提到我必須運行一個需要40分鐘的構建,即使在我的構建過程參數中將Clean Workspace設置爲None甚至可以讓測試運行?這是另一個帖子的另一個問題= /。

有沒有辦法查看測試斷言失敗的全部結果(例如,沒有,例如,字符串比較被截斷)?測試運行日誌文件可能?

+0

您在使用XAML構建或vNext建立你怎麼TFS過程中使用的MSTest建立你怎麼了?配置構建定義? –

+0

這些都是很好的問題,但我不能回答由於工作限制 - 更不用說簡短的答案是...方式太複雜的評論;)。我接受你的答案是最相關的並且唯一)解決方案。謝謝。 – PerryC

回答

1

根據您的描述,您希望在C++中表達斷言失敗消息。檢查this情況下,可以幫助你:

「 此問題的一個常見的解決方案是創建一個斷言宏舉一個例子看this question他們在這個問題的答案宏的最終形式如下:。

#define dbgassert(EX,...) \ 
    (void)((EX) || (realdbgassert (#EX, __FILE__, __LINE__, ## __VA_ARGS__),0)) 

在你的情況下,realdbgassert是一個函數,它將任何相關信息打印到stderr或其他輸出控制檯,然後調用assert函數本身。根據你想要的信息量,你也可以做一個stack dump,或者記錄任何其他相關信息將幫助您確定問題,但它可以就像傳遞一個printf-esque格式的字符串一樣簡單,以及相關的參數值。

請注意,如果您的編譯器不支持可變宏,則可以創建取代特定數量參數的宏。這是稍微麻煩,但是如果你的編譯器缺乏支持,例如一個選項:?

#define dbgassert0(EX) \ ... 
#define dbgassert1(EX,p0) \ ... 
#define dbgassert2(EX,p0,p1) \ ...