使用Visual Studiounit testingC#的命令行参数

我应该使用VSunit testing框架来确保所有代码都正常工作。 但是,我很难获得需要命令行参数的测试(因为命令行输入必须在运行时给出……并且unit testing没有真正的“运行时”)。 有没有办法用命令行参数输入运行我的unit testing? 我意识到这不是构建程序的理想方式,但遗憾的是我没有决定测试过程的工作原理。

我已经读过,我可以写一个批处理文件并将其包含在MStest / testcontainer文件夹中。 尽管如此,我必须清除一些冲击,以便这样做。 这些冲击包括:

1)我对批处理文件一无所知

2)我不知道MStest / testcontainer文件夹在哪里,如何访问它,它是如何工作的,甚至不知道如何向它添加文件(因为它似乎是隐藏的或不容易访问)。

3)我不知道我对批处理文件做了什么,即使它是在MStest / testcontainer文件夹中正确写入的。 我的测试甚至应该知道它在哪里,更不用说从中获取输入了?

总结一下:如何让VSunit testing接受命令行参数? 如果我必须使用批处理文件方法,我将非常感谢它向我解释,就像我是5.我道歉,如果我在这个主题上显得有些无助,但我找不到任何明确或有用的解释在这个特定的背景下,这些东西是如何运作的。

万分感谢。

简而言之,将解决您的问题,以及不正确的unit testing方法:-):

如果您的程序需要命令行参数,那么它应该具有static void Main(string[] args)方法。

只需编写unit testing,即可使用通常添加的命令行参数调用此方法。

更长,更好的方法:在2中分割你的function – 一个完成工作的类,只是一个简单的程序,它获取命令行参数并将它们传递给worker。

写2unit testing – 一个,Main(xxx)实际上将参数传递给您的类,并且许多unit testing为您的实际工作者根据这些参数validation其行为。

您可以使用Process类在测试方法中启动程序的新实例。 就像是:

 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;