代码之家  ›  专栏  ›  技术社区  ›  Ryu

单元测试程序集运行不正常

  •  1
  • Ryu  · 技术社区  · 15 年前

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

    我所做的是为公共类提供他们自己的IOC容器,它们可以在激活后建立起来。这很好,但是我一尝试单元测试就会遇到问题,原因有两个…

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

    2. 进程外程序集需要安装到GAC中,如果是COM+,则需要注册。这让测试很痛苦,因为在测试之前需要安装它们。

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

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

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Andrew Shepherd    14 年前

    我同意您的第一个建议:为运行在进程中运行程序集的测试准备一个单独的工作副本。

    优点是:

    • 一旦您在系统上运行了这个功能,它将在其他团队成员的机器上运行,而不进行任何配置。

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

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

        2
  •  2
  •   kyoryu    15 年前

    通常,我会在一个过程中为组件编写测试,在另一个过程中为组件编写测试,而不必为中间的点费心(只需尽可能地保持它们的厚度)。

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