单元测试组件耗尽过程

时间:2009-08-12 01:05:39

标签: wcf unit-testing dependency-injection gac com+

那里的任何人都有测试“过程外组件”的经验吗? 我正在测试一些配置为在进程外激活的Com +(服务组件)和WCF服务,我不确定在这些情况下测试的最佳实践是什么。

我所做的是给公共类他们自己的IOC容器,他们可以在激活后建立。这样可以正常工作,但是一旦我尝试单元测试有两个原因我就会遇到问题......

  1. 我想要注入的任何依赖项对象都需要可序列化,因为单元测试在不同的进程中运行。如果我想将一个额外的模块(ninject)加载到com + kernel / ioc容器中,我需要编写自己的模块以使其可序列化。为了进行测试,我觉得将事物序列化是不舒服的。

  2. 需要将进程外组件安装到GAC中,并且在Com +的情况下需要注册。这使得测试成为一种痛苦,因为它们需要在测试之前安装。

  3. 我现在只能想到两种解决方法。

    1. 有一个单独的工作副本用于运行测试,我已修改配置以运行正在进行的程序集。显然这并不理想,因为现在我修改代码只是为了让它可以测试。虽然我可以忍受这个,因为它不涉及任何功能变化。

    2. 让单元测试继承自Com +或WCF组件,以便测试可以在相同的进程边界中运行。 (这需要将单元测试安装到GAC中)

2 个答案:

答案 0 :(得分:2)

一般来说,我会在一个过程中编写组件的测试,在另一个过程中编写组件,而不一定要打扰中间的点(只是让它们尽可能地保持薄)。

如果您正在测试两个独立进程之间的交互,我认为这几乎是按照定义进行集成测试。

答案 1 :(得分:1)

我会提出你的第一个建议:有一个单独的工作副本,用于运行正在运行程序集的测试。

优点是:

  • 在您的系统上运行后,它将在其他团队成员的计算机上运行,​​无需任何配置。

  • 由于您没有进行进程间调用,测试运行速度会明显加快。

我记得当我第一次开始测试驱动开发时。和你一样,我不愿意改变我的代码只是为了适应自动化测试。我逐渐改变了我的心态。这些库需要为两个同样重要的客户端提供服务:生产客户端代码和测试。