我有一个简单的控制台应用程序。它是用普通的 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/