gpt4 book ai didi

visual-studio-2012 - Microsoft Fakes & TFS 2012 Visual Studio Test Runner - 单元测试偶尔失败

转载 作者:行者123 更新时间:2023-12-04 07:23:55 27 4
gpt4 key购买 nike

环境

  • Visual Studio 2012 高级更新 3
  • Team Foundation Server 2012 更新 3
  • 编辑:.NET Framework 4
  • DefaultTemplate (DefaultTemplate.11.1.xaml)
  • Visual Studio 测试运行器
  • 目标平台:X86

  • 问题

    我有 2 个单元测试程序集:
  • 扩展测试
  • 用户测试

  • 两者都使用 微软假冒框架 (使用 stub 和垫片)。

    在本地运行单元测试有效 很好 (在 4 台不同的机器上进行测试,甚至在构建服务器上安装的 Visual Studio 上),但是如果我们使用构建代理进行构建,则某些单元测试会失败并出现异常,例如:
    Unable to create instance of class UserTests.ClientUserTest. Error: System.TypeLoadException: Could not load type 'WorldDirect.CCM.Shared.Backend.SmartClassic.Fakes.StubClient' from assembly 'WorldDirect.Smart.Backend.Fakes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

    或相同的垫片:
    Test method ExtensionTests.ExtensionTests.UpdateExtensionValidate_NoGrnp_ChecksIpPbxDependencies threw exception: System.TypeLoadExceptio: Could not load type                'WorldDirect.CCM.Shared.Backend.SmartClassic.Fakes.ShimIpPbxRemoteDestination' from assembly 'WorldDirect.Smart.Backend.Fakes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

    有趣的是,他们偶尔会失败,我试图编造一些统计数据:
     #     | Outcome          | Comment  
    19 | 64/64 passed | only 'UserTests'-UnitTests run, 'ExtensionTests' inactive
    20 | 37/64 passed | same source code as #19
    21 | 64/64 passed | same source code as #19

    22 | 64/66 passed | all 'UserTests' run as well as 2 'ExtensionTests', others still inactive; the 2 ExtensionTests failed with ShimIpPbxRemoteDestination-TypeLoadException
    23 | 38/65 passed | same source code as #22, notice NOTHING has changed, however 1 unit test was not even run in 'ExtensionTests'; however the second succeeds; all unit tests in 'UserTests' using MS Fakes fail with a StubClient-TypeLoadException
    24 | 38/65 passed | same source code as #22

    new day - no more luck :-(

    1 | 37/64 passed | uncommented the 2 'ExtensionTests', so same code as #19
    2 | 37/64 passed | so same code as #1
    3 | 64/64 passed | so same code as #1; suddenly they all work again

    请注意,除了提到的更改之外,没有人更改源代码。
    所有构建都是使用详细的日志级别进行的;
    垫片诊断=“真”;
    .fakes-file 中只包含明确需要的垫片/ stub (否则 MSBUILD 使用退出代码 1 失败)。

    这一切对我来说似乎很神奇,可能有人已经遇到过同样的问题,或者有人有提示。

    提前致谢

    最佳答案

    我想我知道问题出在哪里了,TypeNotFoundException是正确的,至少没有生成相应的类型(如Reflector所示),这让我思考。更确切地说,每个程序集在 [buildName]\Binaries 下只生成一个生成的假文件-并且因为我的两个程序集伪造了同一个程序集(backend.dll)-这很可能导致竞争条件-一个程序集 build 得晚于另一个生成最终垫片/ stub ;但这并不能说明所有问题。

    无论如何,这不会出现在常规 VS 构建中的原因是因为程序集是在它们各自的 [assembly]\FakeAssemblies 目录中生成的,不会影响任何其他单元测试(它应该是这样)。

    所以我绕过这个问题的想法是将两个测试组件使用的所有垫片/ stub 放入两个 .fakes-configuration-files;反射器显示这次确实生成了所有需要的垫片/ stub ,但是构建失败了

    Exception Message: MSBuild error 1 has ended this build. 

    任何(详细)日志中都没有更多信息。这个问题是由于没有使用在 .fakes-file 中指定的生成的 shim/stub-object(当然这也是构建服务器刚刚显示的一个问题,否则会太无聊;-))。

    所以我想出的最终解决方案是将所有使用垫片/ stub 的代码放入同一个程序集中,其中只有 1 个 .fakes-file 配置了 fake-Assembly。

    现在它工作正常:-),但我认为 MS-Dev-Team 在这里还有一些事情要做,不过还没有用 TFS2013 对其进行测试;无论如何都会提交一个错误(因为我已经发现了 2 个)

    希望这可以帮助有同样问题的人。

    关于visual-studio-2012 - Microsoft Fakes & TFS 2012 Visual Studio Test Runner - 单元测试偶尔失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717026/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com