9

我有一个简单的控制台应用程序。它是用一个普通的 main 触发的,整个程序在 main 中返回。它使用命令行解析器库。然后我在解决方案中有第二个项目,其中包含应用程序的单元测试。但是我似乎没有找到从测试中启动主程序进程的好方法。我当前实际启动该过程的代码看起来像这样。

...

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;

但是我是否必须为控制台应用程序可执行文件指定整个相对路径,或者是否有一种改进的方式来启动“测试”应用程序的进程?首先,我将测试作为“主”程序中的一个类,然后它工作得很好。当我将测试转移到他们自己的项目时,问题就开始了。这就是为什么我怀疑路径是问题或类似性质的东西。

我也试过 Running Program.Main 但这感觉很不对:)

4

2 回答 2

21

我建议将您的应用程序重组为:

  • Program- 解析参数的入口点,创建一个Settings实例
  • Settings- 应用程序设置(根据口味重命名)
  • BusinessClass- (绝对重命名!)接受Settings实例的实际工作

现在您可以单独测试:

  • 测试解析成Settings,即你是否正确使用了解析器库
  • 您的业​​务逻辑,单元测试在其中创建适当的实例Settings

如果可能的话,您当然应该将您的业务逻辑分成不同的类来处理不同的关注点,并分别进行测试。我们真的没有足够的知识在这里提出具体的建议。

于 2012-08-24T12:48:16.473 回答
2

我不知道为什么运行 Program.Main 对您来说感觉不对。
你不应该对控制台机制进行单元测试。只有你的程序逻辑,你可以很容易地做到这一点。

于 2012-08-24T07:02:17.100 回答