6

我应该使用 VS 单元测试框架来确保所有代码都能正常工作。但是,我在获取需要命令行参数才能工作的测试时遇到了很多麻烦(因为必须在运行时给出命令行输入......并且单元测试没有真正的“运行时”)。有没有办法使用命令行参数输入运行我的单元测试?我意识到这不是构建程序的理想方式,但不幸的是我不决定测试过程是如何工作的。

我读过我可能会编写一个批处理文件并将其包含在 MStest/testcontainer 文件夹中。不过,为了做到这一点,我必须清除一些障碍。这些冲击包括:

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

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

3)我不知道我会如何处理批处理文件,即使它写得正确并且在 MStest/testcontainer 文件夹中。我的测试怎么可能知道它的存在,更不用说从中获取输入了?

总结一下:如何让 VS 单元测试接受命令行参数?如果我必须使用批处理文件方法,我将非常感谢像我 5 岁一样向我解释它。如果我在这个主题上显得有点无助,我深表歉意,但我找不到任何清晰或有用的解释这些事情中的任何一个在这个特定的上下文中是如何工作的。

万分感谢。

4

2 回答 2

2

简而言之,将解决您的问题,以及不正确的单元测试方法:-):

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

只需编写单元测试以使用通常添加的任何命令行参数调用此方法。

更长,更好的方法:将您的功能拆分为 2 - 一个完成工作的类,以及一个简单的程序,它获取命令行参数并将它们传递给工作人员。

编写 2 个单元测试 - 一个, Main(xxx) 实际上将参数传递给您的类,并为您的实际工作人员进行许多单元测试,以根据这些参数验证其行为。

于 2013-07-15T16:26:35.053 回答
0

您可以使用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;
于 2013-07-12T21:56:05.727 回答