c# - 单元测试控制台 c# 应用程序的最佳方法

标签 c# unit-testing nunit

我有一个简单的控制台应用程序。它是用普通的 main 启动的,整个程序都在 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;

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

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

最佳答案

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

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

现在你可以单独测试了:

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

当然,如果可能,您应该将业务逻辑分离到单独的类中以处理不同的问题,并分别进行测试。我们真的不够了解,无法在这里提出具体建议。

关于c# - 单元测试控制台 c# 应用程序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12104429/

相关文章:

c# - 使用枚举和继承的工厂设计模式

c# - 菜单和滚动条

C# 默认参数

asp.net-mvc - 带 Moq 的单元测试存储库

python - 单元测试完成后如何删除图像文件?

visual-studio-2010 - 无法使用 Visual Studio 调试 NUnit 测试

c# - 服务定位器适用于应用程序但不适用于动态实例化的类

java - 如何对 'randomly' 选择一个值的行为进行单元测试?

unit-testing - 如何使用两个不同的设置运行一组nUnit测试?

c# - 使用 NUnit 在 VS2012 中调试而不抛出异常?