代码合同-Visual Studio Team Service脚本化生成服务器单元测试失败

伊戈尔

我最近在我的解决方案中添加了代码合同。进行一些修改后,我们的构建没有任何问题,但是由于代码合同,我们的单元测试失败了。

环境:

  • 源代码管理和生成服务器托管在Visual Studio Team Service(VSTS)脚本生成(以前称为VSO)上
  • VS 2013 Premium Code(现在为VS 2015 Enterprise)合同已在配置DebugRelease
  • 代码协定已关闭,并DoNotBuild为自定义配置设置了标志BuildServer
  • Visual Studio Team Services构建定义:
    1. 有步Visual Studio
    2. 设置了标志 /p:CodeContractsEnableRuntimeChecking=false;CodeContractsReferenceAssembly=false

来自构建服务器的示例错误文本:

测试方法Web.Tests.AccountControllerTests.CreateAccount_Pass_NoPasswordSend_Test引发了异常:System.Diagnostics.Contracts.ContractException:必须使用代码协定二进制重写器(CCRewrite)重写程序集(可能是“ Cms.Web”),因为它正在调用Contract.Requires和定义了CONTRACTS_FULL符号。从项目中删除任何CONTRACTS_FULL符号的明确定义,然后重新生成。

我已经检查了构建服务器的诊断输出,并且在CONTRACTS_FULL任何地方都找不到符号

我不想在构建服务器上启用代码协定,主要是因为我曾尝试过,但没有成功,并且由于时间限制,我放弃了(经过更多搜索后,我得出结论认为这是不可能的,因为Microsoft不允许要在构建服务器上安装的自定义扩展程序)。我只是想忽略构建服务器上的代码协定,但是执行单元测试似乎没有做到这一点。

有人对我需要在哪里确保单元测试忽略代码约定有任何想法吗?似乎应该这样吧?也许我可以在构建定义中设置另一个标志,以供单元测试使用?


编辑

请注意,构建服务器作为Microsoft服务托管在云中,作为Visual Studio Team Services(以前称为Visual Studio Online)的一部分。这意味着它不是我们的构建服务器,我们无法控制构建服务器上安装的内容。即使如此,我们仍要使用代码合同。下面接受的答案是允许这种情况的一种方式。

午夜四点

请,请阅读《代码合同》手册。它告诉您所有您需要知道的内容。您不需要ConditionalAttribute在方法上定义任何内容Contract.Requires<TException>(bool condition)如果您知道这样做的要求,则可以使用

作为@Mixxiphoid自己回答说,因为他们使用的通用形式要求,需要代码契约要在构建服务器上安装 [执行运行时检查合同需求释放配置启用除了调试配置。

如果使用的是Code Contracts,则始终需要在生成Debug版本的生成服务器上安装Code Contracts。您的团队也是如此:所有需要编译代码的开发人员都将被要求安装用于调试版本的代码合同。

全部内容都在代码合同》手册的第5节:使用指南中。第20页上有一个有用的图表,其中概要介绍了各种使用场景及其要求。


关于 Contract.Requires<TException>(bool condition)

首先,为代码合同编写此方法的开发人员不会忘记将它应用于ConditionalAttribute该方法,正如公认的答案所言。离得很远。此方法未使用该属性修饰的事实是设计使然

如果您阅读了第5节:使用指南,就会发现如果使用这种形式的Requires方法,那么在ccrewrite构建程序集时就需要使用二进制重写器这意味着将要构建您的程序集的任何计算机都必须ccrewrite可用。

那么,您可能无法控制的构建服务器又如何呢?我很高兴你问。


TFS托管构建服务器

关于TFS托管的构建服务器:的确,您不能简单地在构建服务器上安装代码协定。那么您有什么选择呢?

  1. 您可以将自己限制为仅使用“旧式”形式的代码契约,如果使用if-then-throw块,则紧随其后,Contract.EndContractBlock()或者将自己限制为仅使用Contract.Requires(bool condition)(非泛型形式),或将二者结合使用。
    • 无论哪种情况,您都可能希望为TFS托管的构建服务器使用单独的Debug构建配置。此构建配置将为此构建配置禁用“执行运行时合同检查”
  2. 您可以做一点“ binging”或“ googling”,然后得出这个搜索结果,搜索结果描述了如何在TFS Online上使用代码合同来构建您的解决方案。

上面链接的博客文章中包含有关修改TFS托管构建控制器托管构建的说明。

更新:很快就会出现代码合同的一些变化对于使用托管构建服务(例如Visual Studio Online,AppVeyor等)的那些人,新的社区驱动的代码合同GitHub repo最近宣布了v1.10.xxxxx.RC1。在发行说明中,他们提到了NuGet版本的代码合同享受。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

代码合同-Visual Studio Team Service脚本化的生成服务器单元测试失败

来自分类Dev

将文件从Visual Studio Team Services中的生成服务器提交回存储库

来自分类Dev

在 Visual Studio Team Services 构建期间无法生成代码优先迁移脚本

来自分类Dev

C#4.0 + / Visual Studio 2013中的代码合同

来自分类Dev

Azure中的Visual Studio Team Services构建服务器

来自分类Dev

Azure中的Visual Studio Team Services构建服务器

来自分类Dev

从VS2010中的WinForms代码对Visual Studio Team Services(是TFS在线)的身份验证失败

来自分类Dev

Visual Studio Team Services-代码存储库隐私

来自分类Dev

Visual Studio Team Services(TFS在线)-限制对代码的访问

来自分类Dev

Visual Studio Team Services 代码未与 Azure 网站同步 - git

来自分类Dev

生成计数器-Visual Studio Team Services

来自分类Dev

Visual Studio Team Services(Visual Studio Online)程序包中是否包含代码覆盖范围

来自分类Dev

如何将Visual Studio代码连接到Visual Studio Team Services

来自分类Dev

Visual Studio Team Services从本地生成代理设置生成号

来自分类Dev

Visual Studio Team Services-构建失败,定义错误?

来自分类Dev

Visual Studio Team Services版本失败-外部变量

来自分类Dev

在Visual Studio Team Services中部署后运行集成测试

来自分类Dev

检测我的测试是否在Visual Studio Team Services上运行

来自分类Dev

Visual Studio Team Services在线-运行SQL脚本

来自分类Dev

Visual Studio Online:无法在Team Server上生成报告?

来自分类Dev

更改Visual Studio Team Services中的生成默认值

来自分类Dev

Azure Functions部署源Visual Studio Team Service项目

来自分类Dev

Visual Studio Team Service 中的存储库级别限制

来自分类Dev

Visual Studio Team Services(以前是Visual Studio Online)版本无法部署Azure云服务

来自分类Dev

Visual Studio Online:如何使用访问远程服务器的MVC单元测试创建生成定义?

来自分类Dev

从Visual Studio Team Services中的版本部署到私有IIS服务器

来自分类Dev

重命名Visual Studio和Team Foundation服务器中的项目文件夹

来自分类Dev

如何为Visual Studio Team Services设置符号服务器

来自分类Dev

我可以仅将Visual Studio Team Services用作构建服务器吗?

Related 相关文章

  1. 1

    代码合同-Visual Studio Team Service脚本化的生成服务器单元测试失败

  2. 2

    将文件从Visual Studio Team Services中的生成服务器提交回存储库

  3. 3

    在 Visual Studio Team Services 构建期间无法生成代码优先迁移脚本

  4. 4

    C#4.0 + / Visual Studio 2013中的代码合同

  5. 5

    Azure中的Visual Studio Team Services构建服务器

  6. 6

    Azure中的Visual Studio Team Services构建服务器

  7. 7

    从VS2010中的WinForms代码对Visual Studio Team Services(是TFS在线)的身份验证失败

  8. 8

    Visual Studio Team Services-代码存储库隐私

  9. 9

    Visual Studio Team Services(TFS在线)-限制对代码的访问

  10. 10

    Visual Studio Team Services 代码未与 Azure 网站同步 - git

  11. 11

    生成计数器-Visual Studio Team Services

  12. 12

    Visual Studio Team Services(Visual Studio Online)程序包中是否包含代码覆盖范围

  13. 13

    如何将Visual Studio代码连接到Visual Studio Team Services

  14. 14

    Visual Studio Team Services从本地生成代理设置生成号

  15. 15

    Visual Studio Team Services-构建失败,定义错误?

  16. 16

    Visual Studio Team Services版本失败-外部变量

  17. 17

    在Visual Studio Team Services中部署后运行集成测试

  18. 18

    检测我的测试是否在Visual Studio Team Services上运行

  19. 19

    Visual Studio Team Services在线-运行SQL脚本

  20. 20

    Visual Studio Online:无法在Team Server上生成报告?

  21. 21

    更改Visual Studio Team Services中的生成默认值

  22. 22

    Azure Functions部署源Visual Studio Team Service项目

  23. 23

    Visual Studio Team Service 中的存储库级别限制

  24. 24

    Visual Studio Team Services(以前是Visual Studio Online)版本无法部署Azure云服务

  25. 25

    Visual Studio Online:如何使用访问远程服务器的MVC单元测试创建生成定义?

  26. 26

    从Visual Studio Team Services中的版本部署到私有IIS服务器

  27. 27

    重命名Visual Studio和Team Foundation服务器中的项目文件夹

  28. 28

    如何为Visual Studio Team Services设置符号服务器

  29. 29

    我可以仅将Visual Studio Team Services用作构建服务器吗?

热门标签

归档