【问题标题】:TFS vNext TestRunner ignore double dllsTFS vNext TestRunner 忽略双 dll
【发布时间】:2019-12-12 21:22:05
【问题描述】:

在我们的解决方案中,我们有大约 60 个项目。有一些核心“ish”库被其他项目引用。我们的单元测试与生产代码放在相同的 dll 中(没有特定的单元测试项目)。

我的问题始于在我们的 Team Foundation Server 中使用 Visual Studio 测试运行程序时的持续集成构建。 我希望测试运行器自动运行创建的 dll 中的所有测试。由于方便的原因,我不想手动将路径添加到创建的 dll 中。

目前我正在使用这样的通配符(我们所有的 dll 都以 Company.* 开头):

$(Build.SourcesDirectory)\**\bin\x64\Release\Company.*.dll

通过这种方式可以找到所有 dll,但它们会被找到不止一次,因为 dll 会被复制到引用 dll 的输出目录中。 这会产生大量时间浪费在多次运行相同的单元测试 (>20) 上。

那么我在寻找什么:

  1. 最好是告诉 vstest.console.exe 包含 dll 已经运行(我检查了命令行选项 - 没有)。
  2. 另一个选项是 TFS 的迷你匹配模板的特殊通配符,这样就不会将双 dll 传递给 vstest.console.exe(我什么都不知道,谷歌也不知道)。
  3. 你们如何处理单元测试以便它们在持续集成中自动运行的另一个最佳实践。

【问题讨论】:

    标签: c# unit-testing tfs mstest


    【解决方案1】:

    您没有使用通用且推荐的项目结构。我们通常使用 NuGet 来管理 TFS 源代码管理中的 dll,而不是项目引用。还要创建一个单独的测试项目来处理单元测试。

    有关工作流程,请查看此 MSDN 博客:Testing in Continuous Integration and Continuous Deployment Workflows

    在您的情况下,您可能需要指定相应的 dll 路径进行测试。您还可以添加一个任务将这些 dll 复制到另一个文件夹,然后将 *.wildcard 用于所有测试 dll。

    【讨论】:

    • 感谢您的回答。我不太明白,这里的 nuget-packages 到底指的是什么。我们决定在内部将我们的测试放入我们的生产程序集中,因为这样会创建更少的程序集,并且测试总是接近生产代码。也不是所有成员都必须是公开的。我们将评估您提到的复制方法。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2020-01-20
    • 2010-10-07
    相关资源
    最近更新 更多