1

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

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

  1. 我想注入的任何依赖对象都需要可序列化,因为单元测试在不同的进程中运行。如果我想将一个附加模块(ninject)加载到 com+ 内核/ioc 容器中,我需要编写自己的模块以使其可序列化。我不喜欢为了做测试而让事情可序列化。

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

目前我只能想到两种方法来解决这个问题。

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

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

4

2 回答 2

2

一般来说,我会为一个进程中的组件和另一个进程中的组件编写测试,而不必为中间的点而烦恼(只要让它们尽可能薄)。

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

于 2009-08-12T02:05:10.633 回答
1

我会接受你的第一个建议:有一个单独的工作副本来运行程序集在其中运行的测试。

优点是:

  • 一旦你在你的系统上运行它,它将在其他团队成员的机器上运行而无需任何配置。

  • 测试将运行得更快,因为您没有进行进程间调用。

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

于 2009-08-12T02:00:45.223 回答