我有一个简单的控制台应用程序。它被普通的主要解雇了,整个程序都在main中。它使用Command Line Parser Library。然后我在解决方案中有第二个项目,包含应用程序的单元测试。但我似乎没有找到从测试中启动主程序进程的好方法。我当前启动该过程的代码看起来像这样。
...
process = new Process();
process.StartInfo.FileName = "FooBar";
process.StartInfo.Arguments = arguments;
// use it to start from testing environment
process.StartInfo.UseShellExecute = false;
// redirect outputs to have it in testing console
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
...
我尝试过设置
process.StartInfo.WorkingDirectory
到
AppDomain.CurrentDomain.BaseDirectory
和
Environment.CurrentDirectory;
但我是否必须指定控制台应用程序可执行文件的完整相对路径,还是有一种改进的方法来启动“已测试”应用程序的进程? 首先,我在“主要”程序中将我的测试作为一个类,然后它工作得很好。当我将测试移动到他们自己的项目时,问题就开始了。这就是为什么我怀疑路径是问题或者那种性质的东西。
我也尝试过运行Program.Main,但这感觉很错误:)
答案 0 :(得分:20)
我建议将您的申请重组为:
Program
- 解析参数的入口点,创建Settings
实例Settings
- 应用程序的设置(根据品味重命名)BusinessClass
- (绝对重命名!)实际工作,接受Settings
实例现在你可以分开测试:
Settings
,即您正确使用解析器库Settings
如果可能,您应该将业务逻辑分离为单独的类,以便分别考虑单独的问题,并分别对每个问题进行测试。我们真的不知道在这里提出具体的建议。
答案 1 :(得分:1)
我不知道为什么运行Program.Main对你来说错了。
你不应该对控制台机制进行单元测试..只有你的程序逻辑,你可以很容易地做到这一点。