【问题标题】:Run multiple test same build from different tests project从不同的测试项目运行多个测试相同的构建
【发布时间】:2017-05-16 23:03:49
【问题描述】:

在以下情况下需要您的帮助:

  • 我有一个包含 2 个具有不同单元测试的项目的解决方案
  • 这些项目生成 2 个不同的 dll:*deployment.dll 和 *database.dll
  • 我有一个基于 TFS 的构建,我想用它来运行这些测试,我正在使用“测试用例过滤器”来过滤我的测试类别

    (TestCategory=TEST1|TestCategory=TEST2|TestCategory=TEST3|TestCategory=TEST4) 
    

    在“测试源规范”中,我过滤了两个 dll (*deployment.dll;*database.dll)

  • *.deployment.dll 有 TEST2、TEST3、TEST4
  • *.database.dll 有 TEST1

这不起作用,*database.dll 的测试不会运行。在 Visual Studio 测试运行程序中选择的测试

你能帮忙吗?如果我只使用 1 个 dll 进行构建,例如 *.database.dll,则 TEST1 运行良好。

(更新)场景 1

测试用例过滤器: TestCategory=TEST1|TestCategory=TEST1|TestCategory=TEST2|TestCategory=TEST3|TestCategory=TEST4

测试源规范: *database.dll;*deployment.dll

仅运行 TEST1


(更新)场景 2

测试用例过滤器: TestCategory=TEST1|TestCategory=TEST1|TestCategory=TEST2|TestCategory=TEST3|TestCategory=TEST4

测试源规范: **\*deployment.dll;*database.dll

只运行 TEST2、TEST3、TEST4

(更新)在 Database.dll 中找不到测试

【问题讨论】:

  • 没有应用过滤器,但添加了两个程序集,测试是否运行?这些测试的实现技术是什么,mstest?什么版本的 TFS?什么版本的VS? (请调整标签更精确)。类别是如何应用的?在测试级别?班级水平?命名空间级别?
  • 您使用的是哪个构建系统? XAML 或新的 TFS 2015/2017 类型构建?
  • 假设您使用的是 XAML 构建,我无法重现您的问题。您可以查看 jessehouwing 的问题并提供更多详细信息。
  • 我需要这个过滤器来确保测试有特定的排序,你知道另一种方法吗? VS 2015 更新 3 XAML 构建类别在测试级别应用下面的示例来自 Cece 这是我的场景,但我在每个项目中都有更多测试
  • @Cece-MSFT , Visual Studio 测试运行器

标签: visual-studio unit-testing tfs tfsbuild vstest


【解决方案1】:

我已在 TFS 2015.3、XAML 构建中进行了测试,但无法重现您的问题。我想在这里分享我的步骤供您参考:

  1. 我有一些项目的解决方案,其中 2 个是 UnitTest 项目(UnitTestProject1、UnitTestProject2)。

  2. 在UnitTest1项目中,我为两个测试用例添加了TestCategory,截图如下:

    [TestMethod()]
    [TestCategory("Pro")]
    public void M1Test()
    {
       //
    }
    
    [TestMethod()]
    [TestCategory("Dev")]
    public void M2Test()
    {
        //
    }
    
  3. 与Step2类似,在UnitTest2项目中,我为两个测试用例添加了TestCategory,截图如下:

    [TestMethod()]
    [TestCategory("Pro1")]
    public void M3Test()
    {
       //
    }
    
    [TestMethod()]
    [TestCategory("Dev1")]
    public void M4Test()
    {
        //
    }
    
  4. 在构建定义中编辑“测试用例过滤器”和“测试源规范”,如下图所示并排队构建:

  1. 测试结果符合预期。仅测试 UnitTestProject1 中的 M1Test 和 M2Test,UnitTestProject2 中的 M3Test 和 M4Test。

【讨论】:

  • 嗨 Cece,我提出了你的建议,最初我有 ***database.dll;***deployment,我更改为 *database.ddl;*deployment.dll 现在,TEST1 运行好吧,其他测试没有运行。我更改为 *database.dll;***deployment.dll 并给我一个错误:访问路径 'C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\Content.IE5'被拒绝你知道会发生什么吗?
  • *deployment.dll、*database.dll的全名是什么? **\ *deployment.dll;**\ *database.dll 怎么样?
  • Hermes.Gold.Deployment.dll Hermes.Gold.Database.dll 这可能是流程模板上的错误吗?因为它似乎只捕获了我在测试源规范中插入的程序集之一...... foreach 到 TestSpecList 的工作原理是什么?
  • 您好,已经查看了流程模板,看起来一切正常,但是,MatchPattern 的内容是这样的:"String.Format("{0}\{1}", BuildDetail.DropLocation, agileTestPlatformAssembly.AssemblyFileSpec)”,并且它似乎没有捕获所有来源的测试,请注意此消息(在本主题中更新):搜索模式没有匹配项**\*Database.dll
  • 没有应用过滤器,但添加了两个程序集,测试是否运行?
【解决方案2】:

终于解决了:)

所以,我为解决这个问题所做的就是更改构建过程模板。

这个过程有一个步骤,调用:“FindMatchingFiles”

我改变了这个值,如下图所示。 (但是,从现在开始,我必须在使用此流程模板的所有过滤器中使用“**\*”)。此操作确保我已完成具有完整路径目标的程序集。

如果您有不同的解决方案,请在此处发布:)

特别感谢 @Cece - MSFT 的所有支持

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多