Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 单元测试程序集在进程外运行_Wcf_Unit Testing_Dependency Injection_Gac_Com+ - Fatal编程技术网

Wcf 单元测试程序集在进程外运行

Wcf 单元测试程序集在进程外运行,wcf,unit-testing,dependency-injection,gac,com+,Wcf,Unit Testing,Dependency Injection,Gac,Com+,有没有人有过测试“进程外组件”的经验? 我正在测试一些配置为进程外激活的Com+(服务组件)和WCF服务,我不确定在这些情况下测试的最佳实践是什么 我所做的是为公共类提供它们自己的IOC容器,它们可以在激活后构建IOC容器。这很好,但我在尝试和单元测试时遇到了问题,原因有二 我想要注入的任何依赖项对象都需要可序列化,因为单元测试运行在不同的进程中。如果我想将一个附加模块(ninject)加载到to-com+内核/ioc容器中,我需要编写自己的模块,使其可序列化。我不喜欢仅仅为了做测试而将事情序列

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

我所做的是为公共类提供它们自己的IOC容器,它们可以在激活后构建IOC容器。这很好,但我在尝试和单元测试时遇到了问题,原因有二

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

  • 进程外程序集需要安装到GAC中,如果是Com+,则需要注册。这使得测试变得很痛苦,因为在测试之前需要安装它们

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

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

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


  • 我同意您的第一个建议:为运行在流程中运行程序集的测试提供一个单独的工作副本

    优点是:

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

    • 由于您没有进行进程间调用,测试将运行得更快


    我记得我第一次开始测试驱动开发的时候。和你一样,我不愿意仅仅为了适应自动化测试而更改代码。我逐渐改变了我的心态。图书馆需要服务于两个同样重要的客户:生产客户端代码和测试。

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


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

    这是Jon Skeet hehe的测试