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



我有一个简单的控制台应用程序。它是用一个普通的主旋律来激发的,整个节目都在主旋律中朗诵。它使用命令行分析器库。然后,我在解决方案中有第二个项目,其中包含应用程序的单元测试。但我似乎并没有找到一个好的方法来从测试开始主程序的进程。我当前用于实际启动流程的代码如下所示。

...
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,但感觉太不对了:)

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

  • Program-解析参数的入口点,创建Settings实例
  • Settings-应用程序的设置(根据喜好重命名)
  • BusinessClass-(肯定要重命名!)实际工作,它接受Settings实例

现在你可以单独测试了:

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

如果可能的话,您应该将您的业务逻辑划分为不同的类,当然也应该针对不同的关注点,并分别测试每个类。我们知道的还不够多,无法在此提出具体建议。

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

最新更新