2013-07-12 108 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)实际将参数传递给您的类,以及许多单元测试,以便您的实际工作人员根据这些参数验证其行为。