【问题标题】:Continuous Integration with 64-bit Sharepoint and TFS 2008?与 64 位 Sharepoint 和 TFS 2008 持续集成?
【发布时间】:2010-11-27 10:12:31
【问题描述】:

我已经使用 Sharepoint、持续集成和开箱即用的 MSTest 设置了一个 64 位 TFS 2008 构建服务器。普通业务逻辑类的单元测试运行良好,测试结果发布到 TFS。但是,任何使用 Sharepoint API 的测试都会失败,SPFarm.Local 返回 null 等等。有没有办法解决这个问题?

测试在其他方面相同的 32 位开发环境(Hyper-V 下的 Windows Server 2008,Sharepoint 已修补至 2009 年 6 月累积更新)中运行良好,可通过 Visual Studio 和命令行进行,因此问题不在于使用不当SPContext.Current 或需要在 Web 服务器上下文中运行的 API 的任何其他部分。我已经排除了permissions issues,因为构建代理帐户可以使用stsadm 部署解决方案并创建网站集。下一个罪魁祸首可能是使用32-bit process 运行单元测试,它无法正确访问64 位Sharepoint API。我试过a workaround,但它的副作用是在 MSTest 中禁用了 TFS 支持。

我是否必须等待 2010 版本的 MS 工具(并希望最好),或者是否有可用的第三方测试框架以 64 位本机运行并可以将测试结果发布到 TFS 2008?

【问题讨论】:

    标签: visual-studio-2008 sharepoint continuous-integration


    【解决方案1】:

    这是因为 SharePoint 在正在执行的测试中没有上下文。 SharePoint 的上下文(特别是这里的SPContext.Current 对象)仅在作为 HTTP 请求的一部分在 ASP.NET 页面中运行时才会填充。 MSTest 没有这样做。

    如果您需要针对 SharePoint API 执行集成测试(不同于单元测试),您可以使用Typemock Isolator for SharePoint。这将模拟这些 SharePoint 对象,因此它们不再为空。示例见Francis Cheung's blog

    评论后编辑:我没有这方面的直接经验,但想不出任何原因会在 32 位和 64 位之间出现问题。请仔细查看环境和配置的任何差异。

    【讨论】:

    • +1 用于 SharePoint 参考的 Typemock 隔离器。最近开始研究这个工具 myslef。
    • 测试没有使用 SPContext.Current,也没有使用在内部使用 SPContext 的 API 的任何部分(就像我之前关于 PortalSiteMapProvider 的问题一样)。测试在其他相同的 32 位环境中运行良好。
    • @Hirvox:是的,你没有在你的问题中提到这一点。它可能是 64 位和 32 位的东西,但我的猜测是环境/配置的差异。
    • 该问题已通过有关环境的其他信息进行了修改。
    【解决方案2】:

    我自己也遇到了这个问题。在网上转了一圈,终于找到了这篇文章:http://fastrup.net/post/Visual-Studio-Unit-Tests-and-64-bit-SharePoint-does-not-play.aspx

    我已经倾向于 NUnit 的方向,看看它是否会有所作为,现在我将探索这条途径,如果它有效,这将是我的方法。当您想做正确的事情并对所做的所有事情进行单元测试但工具不支持您需要工作的环境时,这是令人沮丧的。

    【讨论】:

    • 对此进行跟进。在我当前的 SharePoint 项目中使用 NUnit 一周后,我被卖掉了。一切都按照我期望的方式进行,而且我还没有遇到任何障碍。我想要的唯一额外的事情是能够让调试器参与 NUnit 的测试。不过我敢肯定有办法,只是还没找到。
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2017-06-30
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2017-10-22
    相关资源
    最近更新 更多