2016-12-01 32 views
0

我正在尋找方法來快速調試我剛剛寫的代碼,看看它的行爲是否正確,我所有的假設都是正確的。我不想運行完整的系統,因爲部分基礎設施無法使用此代碼。我使用單元測試,但我覺得它很麻煩。有更好的嗎?如何快速調試我的代碼在孤立 - 內部,只有開發人員,扔掉測試

目標是:

  • 調試任何代碼迅速而不產生額外的項目,應用程序等
  • 輕鬆重複調試。
  • 測試是爲了這個特定的目的,可能會使用固定的文件路徑,數據庫連接,任何東西。通常在正確的事情後扔掉。
  • 需要訪問我的對象的內部成員。
  • 訪問私有成員將是很好的好處。
  • 我很好,直接在我的對象中編寫測試函數。其實這是首選。

做這將是夢想的方式:

namespace Aaa 
{ 
    class SomeClass 
    { 
     public string Name { get; private set; } 

     public SomeClass(string name, int value) 
     { 
      this.Name = name; 
      InitializeSth(); 
     } 

     public DoSomethingPublic() 
     { 
      // ... 
     } 

     private DoSomethingPrivate() 
     { 
      // ... 
     } 

     public static void TestThis()   // <-- debug this 
     { 
      var obj = new SomeClass("a", 1); // <-- put breakpoint here 
      obj.DoSomethingPublic(); 
      obj.DoSomethingPrivate(); 
     } 
    } 
} 

這是可能在Java中,是這樣一個偉大的事情。這也允許訪問私人事物。

但我也接受其他選項。在VS2015中有這樣的事嗎?

我迄今爲止嘗試:

  • 即時窗口 - 我不認爲它可以被配置爲這樣的目的
  • C#互動 - 這似乎並不支持調試。還是呢?
  • 單元測試 - 這是我現在使用的(使用MSTest)。但我覺得非常麻煩,這是因爲:
    • 我需要創建新的項目,或者包含到MS測試程序集的引用
    • 我需要額外的步驟來訪問內部類型和成員,或改變的事情公開(我不喜歡這樣)。
    • 更多訪問私人會員的步驟。
    • 如果在項目中使用單元測試,我會與其他測試混淆。
    • 再次啓動調試需要許多點擊,而不是sth + sth + F5。
    • 其中一些項目有一些解決方法,但總的來說,測試基礎架構似乎是爲了不同的目的而設計的,我總是有一種感覺,我正在與它作鬥爭。

我也發現了大約有調試任何靜態功能的能力ReSharper的一些信息。但我不想使用Resharper,主要是因爲性能。

+0

嗨Arek,這個問題呢?你能從我們的建議中獲得有用的信息嗎?任何更新?:) –

+0

我想我找到了一些方法,但我需要測試它。讓我從寒假回來,我會在下週發佈一些東西。 – Arek

+0

我期待您的迴音。如果你有更好的解決方案,請隨時分享答案,當然,如果有任何答覆對你有幫助,你也可以將它標記爲答案,有一個愉快的假期:) –

回答

0

回答我自己的問題 - 看起來我沒評估立即窗口en ough。

它可以調用任何靜態方法或者使用

  • 立即窗口(只需鍵入TestThis()
  • 命令窗口(類型?TestThis()Debug.EvaluateStatement TestThis()

這甚至允許調用私有靜態方法。如果需要啓動方法並在調試器中執行該方法,那麼項目將在啓動之前構建,因此它將在任何斷點處停止。

總結:按Alt+Ctrl+I進入即時窗口,輸入方法名稱並帶圓括號,然後按Enter

有兩個缺點:

  • 如果方法不在主類(一個Main法),你必須使用完整的命名空間和類名,例如MyCompany.MyApp.Logic.SomeClass.TestMethod()運行它
  • 到再次開始調試,你必須立即進入窗口並用Up-Arrow, Enter調用最後的命令。這比右擊測試並選擇「調試此測試」要好,但不是最佳。

如果您知道更好的或者更好地解決這兩個問題的方法,請添加一個答案。我尋找了相當長的時間來找到一個鍵盤快捷鍵來重複上一個立即窗口命令,但找不到一個。我不會將此答案標記爲現在接受,以防發佈更好的內容。

+0

實際上它比其他解決方法更好,當然,您也可以使用命令行窗口直接在VS IDE中執行命令或別名,當然,它確實具有不同的功能:http:// stackoverflow。 COM /問題/ 1557371 /視覺工作室命令窗口。我建議你在其他社區成員可以提供其他答案之前將其標記爲臨時答案:)。祝你今天愉快! –

+0

確實如此。感謝您的有用鏈接。我希望能夠快速地將某個鍵盤鍵綁定到帶有參數的命令上,所以我可以綁定即。 'sth + sth + F5'到'Debug.EvaluateStatement SomeNamespace.SomeClass.SomeMethod',它可以像_選擇當前的測試方法_一樣工作。 – Arek

0

要調試一個方法而不運行整個應用程序,我經常在VS IDE中使用單元測試,因爲它不會真的影響我們的應用程序的開發。

我也得到了使用ReSharper的工具之前的方法:https://blog.jetbrains.com/dotnet/2015/08/28/run-configurations-debug-any-static-method-in-visual-studio-and-more/

在VS IDE,直接調試方法,無需調試/運行的應用程序,它確實沒有比單元測試項目更好的建議。

當然,它也有其他第三方工具,如果你想調試代碼,但不運行應用程序:

http://www.linqpad.net/

+0

傑克:因爲我在問題中寫道,我已經使用單元測試,但發現它不是最優的,並尋找更好的選擇。還有一個問題中提到了Resharper方法。 – Arek

+0

感謝您的迴應,Arek沒有其他更好的解決方法,正如您所說的使用單元測試,在使用單元測試期間的一種更好的方法,您可以使用VS2017 RC中的新功能「實時單元測試」:https:/ /blogs.msdn.microsoft.com/visualstudio/2016/11/18/live-unit-testing-visual-studio-2017-rc/。或者在VS IDE中使用「編輯並繼續」功能的調試功能,以便在調試時編輯代碼。如果它確實不符合您的要求,我可以幫助您向產品團隊提交功能請求。 –

0

看看這個答案:#if DEBUG vs. Conditional(「DEBUG」)

基本上,你可以使用如下所示:

#if DEBUG 
public void DoSomething() { } 
#endif 

public void Foo() 
{ 
    #if DEBUG 
    DoSomething(); 
    #endif 
} 
+0

這與我發佈的問題無關,或者我錯過了什麼? – Arek

相關問題