【问题标题】:Testing code in GAC deployed assemblies在 GAC 部署的程序集中测试代码
【发布时间】:2010-09-12 10:34:56
【问题描述】:

我经常使用 MSTest 对 GAC 部署程序集中的代码进行单元测试。通常在我的开发机器上,我也有一个部署到 GAC 的代码版本。这会导致在对被测代码进行更改时出现问题,因为单元测试会继续针对 GAC 部署的程序集运行。

因此,要实际测试更改的代码,我必须在运行测试之前将程序集重新部署到 GAC。那很容易出错并且不容易使用。有没有人对如何解决这个问题有很好的建议?我认为在构建后事件中简单地运行 GACUtil 或类似的东西不是一个可行的解决方案,因为它可能会给其他开发人员带来问题......

【问题讨论】:

    标签: .net unit-testing mstest


    【解决方案1】:

    我建议您永远不要将任何程序集部署到您的开发机器以及构建服务器上的 GAC 中。在开发时为第三方程序集或项目引用使用本地副本。这样你就可以准确地知道你正在构建什么,并且另一个决定从他的机器上的存储库中签出代码的开发人员将能够非常快速地运行它,而无需安装任何东西。

    应将程序集作为部署过程的一部分放入 GAC,仅在目标计算机上。

    【讨论】:

    • 感谢您的回复,但这并不能解决我的问题。在处理 SharePoint 项目时,不能不将程序集部署到 GAC。当然,除非您不想在运行的 SharePoint 上测试您的代码或将所有内容放在 BIN 部署的程序集中...
    【解决方案2】:

    我也觉得这很烦人。我的测试项目明确引用了项目,而不是 GAC 的程序集......我不确定这是选择 GAC 而不是本地目录的 CLR 加载过程,还是表示首选项的 MSTest(我假设 MSTest 不是处理 appdomain 的程序集解析事件,这会导致默认行为首先检查 GAC)。

    我同意拥有单独的 DEV 和 CI/测试服务器是理想的...但是 SharePoint 的开发确实需要定期将程序集安装到 GAC 中(在某些情况下需要案例),并强迫开发人员在单元测试之前收回/卸载代码,只是为了确保测试使用正确的程序集,有点蹩脚。

    【讨论】:

      【解决方案3】:

      进行更改时使用其他程序集版本

      【讨论】:

        【解决方案4】:

        我同意 Darin 的观点,并且我会避免将程序集部署到我的开发机器上的 GAC。您的单元测试必须针对您的本地程序集运行(这就是我们称它们为 unit 测试的原因,对吧?)。

        如果您想对部署在您机器上的整个应用程序或其中的部分应用程序进行集成测试,只需编写两个 gacutil 调用脚本,将程序集安装到 GAC,运行测试,然后清理 GAC。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-13
          相关资源
          最近更新 更多