我正在研究BDD式自動測試庫,如果我能在異常消息中包含源代碼的失敗測試,那就太好了。我可以找到特定C#函數的源代碼文件名和行號範圍嗎?
假設我可以爬棧跟蹤來找到最能代表測試的函數,我可以使用像Roslyn這樣的工具來找到該函數的源代碼嗎?
通過進一步的解釋,我有測試看起來像這樣:
public void CannotChangePasswordIfCurrentPasswordIsIncorrect() {
Given(
App.ChangePasswordDialog.IsVisible,
App.ChangePasswordDialog.CurrentPassword.Is("InvalidPassword"),
App.ChangePasswordDialog.NewPassword.Is("ValidNewPassword"),
App.ChangePasswordDialog.ConfirmPassword.Is("ValidNewPassword")
);
When(
I.Click(App.ChangePasswordDialog.ChangePasswordButton)
);
Then(
App.ChangePasswordDialog.Alert.IsVisible,
App.ChangePasswordDialog.Alert.HasKeywords("current", "not correct")
);
}
如果測試失敗,我想在異常消息提供儘可能多的背景下,因爲我認爲除了作爲測試用戶界面。我目前包括諸如截圖的鏈接和整個測試視頻的鏈接等內容,如果我還可以包含測試的源代碼(因爲它非常易讀),那將會很好。這是一件小事情,但是在調試測試失敗時涉及到很多心理上下文切換,並且這將幫助您不必去查看測試嘗試執行的操作。
注意:我對單元測試與集成測試的討論不感興趣。這些是集成測試,是的,我們也有單元測試。
你可以假設:
- 我有機會獲得源代碼,並可以提供解決方案文件的路徑
- 我可以爬上異常調用堆棧得到一個System.Reflection.MethodBase 對象的引用它代表函數CannotChangePasswordIfCurrentPasswordIsIncorrect()。
- 如果需要
所以我基本上需要linenumbers的文件名和範圍,其中該功能的源代碼直播我能提供PDB的。
你會與源代碼嗎? – ChaosPandion
編譯後的代碼不包含源代碼。堆棧跟蹤顯示您在何處查看源代碼。堆棧跟蹤對PDB文件更好,但沒有源代碼。我不知道BDD與這裏的任何東西有什麼關係,但是您可以使用反射器等工具對.NET進行一定程度的逆向工程。然後使用堆棧跟蹤手動導航到正確的位置。除此之外,您需要創建一些自定義代碼。這將是一個大項目本身。 –
您可以嘗試使用Mono.Cecil對代碼進行反編譯,但是我不確定這實際上是否可行(或有用),因爲反編譯後的代碼不會與源代碼相同。 – Rafael