【发布时间】:2016-05-19 17:52:16
【问题描述】:
我正在尝试为我的 NServiceBus(版本 5)消息处理程序编写单元测试。我正在使用 RabbitMQ 和发件箱功能。
发件箱功能为您提供类似“DTC”的功能,但是,这是通过将 NHibernateStorageContext 注入您的处理程序来实现的。您所做的任何数据库更改都必须使用来自该对象的数据库连接来完成。 (即所有数据库写入必须通过相同的数据库连接/事务发生)。
我遇到的问题是 NHibernateStorageContext 没有公共默认构造函数。另外,它没有实现任何接口!我无法使用 MOQ 等标准框架来模拟它并传递它。
此时,我能想到的唯一解决方案是使用 MS Fakes,生成该类的 Fake 并将其传递下去。
我错过了什么吗?有没有更简单的方法来做到这一点?
【问题讨论】:
-
虽然有其他方法可以做到这一点,但称它们更容易会是相当固执的。正如您的问题清楚地表明的那样,将您的代码绑定/耦合到您不拥有的类会使它们很难测试。尝试在您拥有的接口后面抽象这些依赖关系,看看这是否提高了可测试性。免责声明:我不熟悉您问题中涉及的技术。这是一般性声明。如果这不适用于您的情况,请谨慎对待。
标签: c# unit-testing moq nservicebus