【问题标题】:NServiceBus Unit testing when using Outbox and NHibernateStorageContext使用 Outbox 和 NHibernateStorageContext 时的 NServiceBus 单元测试
【发布时间】:2016-05-19 17:52:16
【问题描述】:

我正在尝试为我的 NServiceBus(版本 5)消息处理程序编写单元测试。我正在使用 RabbitMQ 和发件箱功能。

发件箱功能为您提供类似“DTC”的功能,但是,这是通过将 NHibernateStorageContext 注入您的处理程序来实现的。您所做的任何数据库更改都必须使用来自该对象的数据库连接来完成。 (即所有数据库写入必须通过相同的数据库连接/事务发生)。

我遇到的问题是 NHibernateStorageContext 没有公共默认构造函数。另外,它没有实现任何接口!我无法使用 MOQ 等标准框架来模拟它并传递它。

此时,我能想到的唯一解决方案是使用 MS Fakes,生成该类的 Fake 并将其传递下去。

我错过了什么吗?有没有更简单的方法来做到这一点?

【问题讨论】:

  • 虽然有其他方法可以做到这一点,但称它们更容易会是相当固执的。正如您的问题清楚地表明的那样,将您的代码绑定/耦合到您不拥有的类会使它们很难测试。尝试在您拥有的接口后面抽象这些依赖关系,看看这是否提高了可测试性。免责声明:我不熟悉您问题中涉及的技术。这是一般性声明。如果这不适用于您的情况,请谨慎对待。

标签: c# unit-testing moq nservicebus


【解决方案1】:

我只是想知道对这样的处理程序进行单元测试是否可以为您提供足够的覆盖范围?消息处理程序的功能远不止简单的单元测试所能涵盖:

  • 标题中的信息是否正确?
  • 如何测试交互(处理程序中的多个消息)?
  • 涉及超时的更复杂的 saga 逻辑怎么样?

出于更多原因,有NServiceBus.Testing 包,强烈建议使用它来测试您的消息传递系统。文档页面here上有示例。

【讨论】:

  • 是的。这正是我想要做的......但是 NHibernateStorageContext 使这变得不可能。我已经升级到 NSB 版本 6 beta004。我会再试一次,因为新版本使用 ISession 并将其传递到句柄调用中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多