c# - 如何在解决方案中集成测试控制台应用程序?

标签 c# unit-testing console-application

我有一个控制台应用程序(稍后将作为 Windows 服务安装),它基本上运行一个无限循环,从队列中读取消息并对该消息执行某些操作。

我想创建一个自动化测试用例来启动测试端到端行为。我的问题是,在单元测试中启动应用程序的最佳方式是什么? 我使用 Process.Start 吗? 或者我可以直接引用 Program.cs - static void main 并运行它吗?

想法?示例代码将不胜感激,谢谢!

[更新:是的,我知道这是一个集成测试。我已经更新了标题。我已经为业务逻辑分离出我的逻辑。集成测试的真正值(value)在于以自动化方式进行测试。它确保我所有的配置设置都是正确的,我的程序集版本问题没问题,我的日志记录和数据库、队列和缓存访问都在运行,等等。]

最佳答案

当我创建这种类型的设置时,我将所有工作放在一个单独的 DLL 中。 Windows 服务/控制台应用程序位于一个将大部分工作委托(delegate)给 DLL 的小型项目中。大多数功能测试都是针对该 DLL 进行的。

为了测试最终的可执行文件,我会启动一个进程(假设您的测试正在生成控制台以您的单元测试可以测量的方式添加句柄的消息)。

确保您有适当的方式来终止控制台应用程序(例如发送“关闭”消息),并检查该进程是否在您的单元测试中实际退出。

如果您有多个单元测试都想启动控制台应用程序,那么如果每个单独的测试都启动控制台应用程序,它们将无法并行运行测试。在这种情况下,让您的测试类负责开始和结束流程,而不是每个单独的单元测试。

关于c# - 如何在解决方案中集成测试控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789956/

相关文章:

c# - 从 Facebook 获取我的 friend

javascript - 我们如何重新加载风 sails 控制台?

c# - asp.net mvc azure AD 身份验证无限循环

c# - Android - 异步任务问题

java - 如何使 Maven 单元测试代码覆盖工作

delphi - 如何使用 DUnit 测试 Singleton 类?

c# - 如何在 Ubuntu 上运行依赖于 NuGet 包的 .net Core 应用程序

c# - Resources.resx 中的 System.Windows.Forms 引用

C#:DataTable逐行转换

python - 没有数据库连接的django unittest