unit testing控制台c#app的最佳方式
我有一个简单的控制台应用程序 它被普通的主要解雇了,整个程序都在main中。 它使用命令行分析器库 。 然后我在解决方案中有第二个项目,包含应用程序的unit testing。 但我似乎没有找到从测试中启动主程序进程的好方法。 我当前启动该过程的代码看起来像这样。
... 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;
但是,我是否必须指定控制台应用程序可执行文件的完整相对路径,或者是否有一种改进的方法来启动“已测试”应用程序的进程? 首先,我在“主要”程序中将我的测试作为一个类,然后它工作得很好。 当我将测试移动到他们自己的项目时,问题就开始了。 这就是为什么我怀疑道路是问题或者那种性质的东西。
我也尝试过Run Program.Main但是感觉很错:)
我建议将您的应用程序重组为:
-
Program
– 一个解析参数的入口点,创建一个Settings
实例 -
Settings
– 应用程序的设置(根据品味重命名) -
BusinessClass
– (绝对重命名!)实际工作,它接受一个Settings
实例
现在您可以单独测试内容:
- 测试解析为
Settings
,即您是否正确使用解析器库 - 您的业务逻辑,unit testing创建适当的
Settings
实例
如果可能的话,您应该将业务逻辑分离为单独的类,以便分别考虑单独的问题,并分别进行测试。 我们真的不知道在这里提出具体的建议。
我不知道为什么运行Program.Main对你来说感觉不对。
你不应该对控制台机制进行unit testing..只有你的程序的逻辑,你可以轻松地这样做。