单元测试控制台c#app的最佳方式

时间:2012-08-24 06:47:01

标签: c# unit-testing nunit

我有一个简单的控制台应用程序。它被普通的主要解雇了,整个程序都在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,但这感觉很错误:)

2 个答案:

答案 0 :(得分:20)

我建议将您的申请重组为:

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

现在你可以分开测试:

  • 测试解析为Settings,即您正确使用解析器库
  • 您的业务逻辑,单元测试创​​建Settings
  • 的适当实例

如果可能,您应该将业务逻辑分离为单独的类,以便分别考虑单独的问题,并分别对每个问题进行测试。我们真的不知道在这里提出具体的建议。

答案 1 :(得分:1)

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