15

我真的在這裏撞牆。在Visual Studio(Express 2013)中獲取程序輸出非常困難?在編寫代碼時,我發現在工作和排除故障時能夠打印出變量,操作等的值是非常重要的。Visual Studio Express 2013:單元測試(控制檯,調試等)中的程序輸出

在Java和Eclipse的的System.out.println()工程百達,印刷到IDE控制檯。在編寫C程序時,我總是使用控制檯,因此回顯任何內容都不成問題。但是,在VS Express 2013中,我似乎無法獲得任何輸出。

可問題是我在寫單元測試,而不是「正常」的可執行程序進行相關的事實呢?如果是這樣,有沒有辦法讓VS在單元測試類中顯示程序輸出?我試過使用調試,但是也沒有顯示任何東西。考慮到存在配置問題,我一直在尋找解決方案來調試沒有顯示的消息,但我發現的選項(在這裏或其他地方)似乎沒有任何幫助。

或者,當然了 - 如果有檢查程序值,輸出等,而在VS/C#編寫代碼的另一種常用的方法,我想聽聽吧:-)

任何人有任何想法?如果問題太不明確或者有問題,請告訴我,我會解決它。

注:我使用的單元測試類的功能測試,如果有人想指出,我應該和不應該單元測試做。

編輯1:我忘了提,我不能來運行「開始:調試」代碼。如果我嘗試,我得到這個錯誤:「具有輸出類庫類型的項目不能直接啓動。」 (單元測試項目使用另一個項目中的類,這是一個類庫項目。)這當然是因爲我在解決方案中沒有可執行項目。我運行它的方式是從測試瀏覽器運行選定的測試。

編輯2:代碼:

using System; 
using System.Diagnostics; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using WordpressAutomation; 

namespace WordpressTests 
{ 

    [TestClass] 
    public class LoginTests : WordpressTest { 

     [TestMethod] 
     public void AdminUserCanLogIn() { 

      System.Diagnostics.Debug.WriteLine("Something..."); 
      System.Diagnostics.Trace.WriteLine("Something..."); 
     } 
    } 
} 
+0

有些代碼會有所幫助。 – 2014-09-11 09:01:09

回答

3

我真的不喜歡回答我自己的問題,因爲它似乎有點「不誠實」。然而,它已經平靜了一段時間,我不認爲還有其他答案。

最實際的解決方案是創建另一個項目,例如創建所有輸出的控制檯項目。它可能不直接與單元測試進行通信,但由於我在這個特定示例中開發的測試框架包含對類庫的功能測試,因此可以在解決方案中使用單獨的項目。

因此,要總結,解決方案包括: - 一個單元測試項目,在實際測試中 - 類庫測試類控制檯項目,或不 - 與框架的邏輯 一個類庫項目單元測試項目中的單元測試類。

+1

不要擔心回答你自己的問題。堆棧溢出鼓勵回答你自己的問題,如果你找出一個合適的問題。你不只是爲自己提問,你還要問他們可能有同樣問題的未來訪問者。 – Nzall 2015-02-25 22:35:27

+1

是的,有時,我問了一個問題並立即回答(通過「分享您的知識,問答風格複選框),因爲我確信我會再次遇到問題,並且我希望通過谷歌搜索來找到它 – 2015-03-25 07:58:10

6
System.Diagnostics.Debug.WriteLine("Yay!"); 

如果您配置輸出窗口中顯示調試數據,它顯示了在那裏。

來源:Visual Studio 2010 Express. Write to the output window(這是VS 2010,但它也應該適用於2013,因爲這是一個框架的選擇,而不是一個IDE選項)。

+0

但是,如何配置輸出窗口?在我的輸出窗口中,我選擇了「顯示來自:Debug的輸出」。但看起來,因爲這是一個單元測試,所以我不能在普通的調試模式下運行它。 – 2014-09-11 09:04:58

+0

據我所知,debug.writeline也應該在發佈配置中的一個項目上工作。我現在要測試這個。 – Nzall 2014-09-11 09:05:57

+0

當定義「DEBUG」符號時,System.Diagnostics.Debug.WriteLine(...)將起作用。你可以使用'System.Diagnostics.Trace.WriteLine(...)'。 – ChriPf 2014-09-11 09:07:50

34

Visual Studio的TestExplorer有一個單獨的輸出窗口。它不寫入到Visual Studio的默認輸出(我不知道這是否是可配置的)

你必須選擇你想看到TestExplorer輸出測試。如果測試有一些輸出,你應該看到一個超鏈接「輸出」。點擊它將打開一個顯示測試輸出的新選項卡。

enter image description here

所顯示的消息的所有寫的Console.WriteLine

我正在使用Visual Studio 2013專業版。我不確定Express版本是否工作不同。

+0

嗯。是。我懂了。這可能是我能從單元測試中得出的最接近的結果?我認爲可能創建一個控制檯項目與測試項目並行生活是一條路。 – 2014-09-12 10:28:36

+0

經過這麼長時間,我已經得出這樣一個結論:這是一個非常實用的解決方案。 – 2015-05-22 16:10:50

+2

嗯這似乎沒有在vs2015企業工作,雖然 – 2016-04-25 12:18:07

2

我相信你應該使用日誌,而不是這樣的情況控制檯輸出。您可以配置日誌以輸出到文件,甚至輸出到您指定的窗口。我相信您可以在沒有控制檯的情況下使用日誌記錄,並且您可以配置日誌,僅在生產中出現警告或錯誤,並且可以在調試會話期間顯示調試信息。

我使用log4j,任何好的日誌軟件都可以在這裏使用。

0

我不確定VS2013,但在VS2008中,如果您雙擊測試結果摘要(完成後,無論是通過還是失敗),它都會打開一個窗口,顯示「常見結果」,「錯誤消息「等,最後按」標準控制檯輸出「。它基本上可以很好地爲每個測試捕獲控制檯輸出。唯一的缺點是它不能實時顯示輸出。它只會在完成時顯示。

0

A project with an Output Type of Class Library cannot be started directly

一個不運行或調試單元測試項目。通過在Test Explorer窗口中選擇1個或更多測試來啓動測試會話。或者在單元測試方法上右擊並選擇Run TestsDebug Tests

使用Console.WriteLineDebug.WriteLine根據需要輸出信息性消息,並在單元測試結果中的Output鏈接中查找它們。

+0

不知道你爲什麼回答我兩年前回答自己的一個兩年前的問題 – 2017-05-05 10:29:54

+0

@FrankH我回答是因爲我在研究問題時登陸這個頁面,並直接回答了一個問題,命中'F5'來調試一個單元測試,你的回答沒有提到這個事實,其他誰在這個誰正在學習可能不理解在Visual Studio中的操作 – OmegaMan 2017-05-05 14:49:34

1

你應該利用日誌框架來做這種事情。從日誌框架中,您可以選擇登錄到控制檯,或者平面文件或許多其他數據接收器,也可以讓框架忽略輸入。良好的日誌記錄框架是極其可配置的。

在.NET的土地上,社區的最愛似乎是NLog,http://nlog-project.org/。 「入門」鏈接將幫助您。

+0

我發現一個更簡單的解決方案很久以前:只需使用Console.Write ,並檢查測試輸出 – 2017-05-05 10:30:21

+0

當然,你可以使用Console.WriteLine,它很簡單,快速 未來,如果你想從類的輸出你將發佈,如果你不希望有人在編寫程序時將輸出顯示給控制檯,那麼你需要一種不同的方式。由於此輸出在測試時非常有用,因此當代碼位於其他環境中時,您可能會發現它很有用。使用Console.WriteLine,您的選項非常有限。 通過使用日誌框架,您可以限制此輸出的可見性,並且您可以以您選擇的格式查看此輸出 – morningstar8 2017-05-18 18:53:47