2013-07-12 137 views
6

我應該使用VS單元測試框架來確保所有代碼正常工作。然而,我在獲取需要命令行參數的測試時遇到了很多麻煩(因爲命令行輸入必須在運行時給出......並且單元測試沒有真正的「運行時」)。有沒有辦法用命令行參數輸入來運行我的單元測試?我意識到這不是構建程序的理想方式,但不幸的是,我不知道測試過程如何工作。命令行參數與Visual Studio單元測試C#

我讀過,我可以寫一個批處理文件並將其包含在MStest/testcontainer文件夾中。爲了這樣做,我必須清除一些衝突。這些突飛猛進包括:

1)我什麼都不知道批處理文件

2)我不知道在哪裏MSTEST/testcontainer文件夾,如何訪問它,它是如何工作的,甚至如何添加文件(因爲它似乎隱藏或不容易訪問)。

3)我不知道我該如何處理批處理文件,即使它被正確寫入並在MStest/testcontainer文件夾中。我的測試甚至應該知道它在那裏,更不用說從它那裏得到輸入了?

所以總結一下:如何讓VS單元測試接受命令行參數?如果我必須使用批處理文件方法,我將非常感謝它向我解釋,如我5。我很抱歉,如果我在這個主題中顯得有點無助,但我找不到任何明確或有用的解釋這些東西中的任何一個如何在這個特定的環境下工作

謝謝了。

回答

0

您可以在測試方法中使用Process class開始程序的新實例。喜歡的東西:

Process prop = new Process(); 
prop.StartInfo.FileName = "myProgram.exe"; 
prop.StartInfo.Arguments = "-arg1 -arg2"; 
prop.StartInfo.RedirectStandardOutput = true; 
prop.StartInfo.RedirectStandardInput = true; 
prop.Start(); 
// You can then use prop.StandardInput and prop.StandardOutput for testing. 
prop.WaitForExit(); 
int code = prop.ExitCode; 
+0

這看起來比整批文件廢話容易得多! Process是什麼名稱空間?另外我會如何在我的測試中使用prop?例如,arg1是我需要訪問的輸入,我是否會說:「prop.StandardInput.arg1」來訪問arg1以用於我的測試功能? –

+0

prop.StandardInput和prop.StandardOutput只是您可以發送文本和讀取的流。這基本上是該程序的黑盒測試。這不會提供訪問特定的方法/變量。它只會測試給定的輸入,獲得正確的輸出。 – Cemafor

+0

感謝您的幫助,現在一切似乎都能順利運行。非常感謝。 –

2

短,將解決你的問題,和不正確的單元測試方法:-):

如果你的程序需要命令行參數,那麼它應該有static void Main(string[] args)方法。

只要編寫你的單元測試,用你通常會添加的任何命令行參數來調用這個方法。

更長,更好的方法: 在2中分割yout的功能 - 一個完成工作的類,只是一個簡單的程序,它獲取命令行參數並將它們傳遞給worker。

寫入2單元測試 - 一個,Main(xxx)實際將參數傳遞給您的類,以及許多單元測試,以便您的實際工作人員根據這些參數驗證其行爲。