标签: dotnet-test

dotnet测试没有创建测试结果文件夹

作为ASP.NET Core 2.0构建过程的一部分,我添加了一个dotnet测试命令,我将其添加为Windows批处理文件.

这是我的命令.

dotnet test "MyProject.csproj" --no-restore --results-directory "MyProject\TestResults" --verbosity minimal
Run Code Online (Sandbox Code Playgroud)

这是从命令行运行时的输出.

在此输入图像描述

所以它似乎都正常工作,但没有创建测试结果/测试输出.

tfs tfsbuild tfs-2015 asp.net-core dotnet-test

12
推荐指数
2
解决办法
7594
查看次数

如何在 VS Code 中调试 dotnet 测试?

本文介绍如何设置 VS Code 设置以将调试目标指向单元测试项目的构建输出。因此,我将我的设置如下:

{
    "explorer.confirmDragAndDrop": false,
    "git.allowForcePush": true,
    "git.autofetch": true,
    "window.zoomLevel": 0,
    "csharp.unitTestDebuggingOptions": {
        "sourceFileMap": {
            "C:\\git\\MsTester\\bin\\Debug\\netcoreapp2.1": "C:\\git\\MsTester\\bin\\Debug\\netcoreapp2.1"
        }
    },
    "files.autoSave": "afterDelay",
    "files.exclude": {
        "**/bin": true,
        "**/node_modules": true,
        "**/obj": true
    },
    "csharpfixformat.style.spaces.insideEmptyBraces": false,
    "csharpfixformat.style.braces.allowInlines": false,
    "csharpfixformat.style.spaces.beforeParenthesis": false,
    "csharpfixformat.style.spaces.afterParenthesis": false,
    "csharp.format.enable": false,
    "extensions.ignoreRecommendations": true
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何设置launch.json以启动dotnet test它以便它可以附加调试器。

这是我目前所拥有的:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "MsTester",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/MsTester/bin/Debug/netcoreapp2.1/MsTester.dll",
            "windows": {
                "args": [
                    "--filter",
                    "TestCategory=lbshell",
                    "--logger",
                    "trx",
                    "--results-directory",
                    ".\\TestResults",
                    "--settings", …
Run Code Online (Sandbox Code Playgroud)

unit-testing vscode-settings dotnet-test vscode-debugger

12
推荐指数
2
解决办法
7132
查看次数

如何使用自定义 NuGet feed 在 VSTS 上运行 dotnet 测试?

我们有一个项目依赖于自定义 NuGet feed(也托管在 VSTS 中)。

我正在尝试整合一个新阶段来生成代码覆盖率报告,如这篇博客文章中所示。我的新阶段如下所示:

新阶段截图

并由以下步骤组成:

  1. .NET Core 工具安装程序 - 使用 SDK 2.0.0
  2. dotnet restore在“使用此 VSTS/TFS feed 中的包”下拉列表中选择我的自定义 feed
  3. dotnet test使用相关参数来收集代码覆盖率
  4. 使用 ReportGenerator 的自定义步骤
  5. 发布结果的步骤

问题是dotnet test坚持尝试恢复包本身。由于我找不到方法告诉它使用自定义源,因此在尝试恢复这些包时失败:

D:\a\1\s\MyProject\MyProject.csproj : error NU1101: Unable to find package My.Package. No packages exist with this id in source(s): Microsoft Visual Studio Offline Packages, nuget.org

我的主要构建过程运行良好,并且能够从自定义源恢复包。区别在于使用 Visual Studio(即非dotnet)版本的命令:

主要构建过程的屏幕截图

处理这个问题的正确方法是什么?

我是否需要找到某种方式来讲述dotnet test我的自定义 Feed?

或者(假设我restore之前正在运行)我是否需要说服它完全跳过恢复?

continuous-integration azure-devops dotnet-cli dotnet-restore dotnet-test

7
推荐指数
1
解决办法
3147
查看次数

如何合并两个或多个 dotnet 测试代码覆盖率文件

我有一个 .Net 解决方案,其中包含两个 dotnet 核心类库及其相关的单元测试项目。

当我运行dotnet test **\*.Tests.csproj --collect "Code Coverage"命令时,它会为每个单元测试项目生成单独的 .coveragexml 文件。

我的要求是将所有 .coveragexml 文件合并到一个文件中,并使用它来获得整个解决方案的总覆盖矩阵。

是否有任何工具或脚本可以实现这一目标?

笔记:

  • 我没有使用 Coverlet。
  • 我正在使用内置的 vstest.console.exe 来运行测试并生成 .coveragexml 文件。
  • 我正在使用自定义代码覆盖率分析

.net code-coverage .net-core dotnet-test

7
推荐指数
1
解决办法
639
查看次数

使用模式使用 dotnet test 测试多个项目

我正在编写一个脚本来在存储库中构建和测试项目。现在,我使用 PowerShell 命令Get-ChildItem -Path test -Filter *.csproj -Recurse | ForEach-Object { dotnet test $_.FullName -c $Configuration }获取我的测试文件夹中的所有 .csproj 文件并在其中运行测试。但是,例如,当我运行时,我注意到dotnet test test/ProjectA/ProjectA.csproj我收到以下消息:

共有 1 个测试文件与指定的模式匹配。

看到这一点,我认为可以使用一种模式通过一个命令在多个项目中运行测试,但我找不到它的文档或让它工作。当我尝试时,dotnet test test/**/*.csproj我得到:

MSBUILD:错误 MSB1009:项目文件不存在。

.net-core dotnet-test

7
推荐指数
2
解决办法
3762
查看次数

Github Actions:以注释形式报告 dotnet 测试结果

如果使用 Azure Pipelines 运行测试,您将在检查选项卡上获得一些很酷的结果。

在此输入图像描述

有没有什么方法可以从 Github Actions 执行相同的操作,这样我们就不必通过控制台输出?

在此输入图像描述

.net continuous-integration .net-core dotnet-test github-actions

7
推荐指数
1
解决办法
3437
查看次数

如何在 .Net Standard 2.1 项目中的程序集级别添加 [ExcludeFromCodeCoverage] 属性

我有一个 .Net Core 应用程序,其中有一个 .Net Standard 2.1 项目。我正在使用 Coverlet 来获取 Cobertura 格式的代码覆盖率。

我在所有测试项目中使用“coverlet.msbuild”nuget 包。

我想在程序集级别添加 [ExcludeFromCodeCoverage] 属性,以便 Coverlet 在执行分析时忽略此项目。

我在 .Net Core / .Net Standard 项目中找不到 AssemblyInfo.cs 文件。

我尝试在 proejct 的 .csproj 文件中添加以下标签

  <ItemGroup>
     <AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气。

对我来说唯一的解决方法是在所有类文件中手动添加 [ExcludeFromCodeCoverage] 属性,这不是最好的方法。

code-coverage .net-core dotnet-test coverlet

6
推荐指数
1
解决办法
4506
查看次数

xUnit - 从 dotnet test CLI 执行时如何选择单个理论

假设我有一个测试:

  [Theory]
  [InlineData("one")]
  [InlineData("two")]
  public void ShouldSelectSingleTheoryFromDotnetTest(string s)
  {
      Assert.True(true);
  }
Run Code Online (Sandbox Code Playgroud)

我想仅使用 Theory data = "one" 从命令行执行测试dotnet test...。这可能吗?

我知道我们可以使用特征选择测试,但我不知道如何将单个特征与理论数据的每一行关联起来。

作为一种解决方法,我想也许我可以使用动态跳过测试的技术,但仍然要做到这一点,我需要从命令行读取参数,并且也不知道如何做到这一点。一种解决方法可能是在命令行上设置环境变量,然后使用动态跳过模式运行测试,其中动态跳过逻辑将读取命令行参数。但这非常笨拙。

.net testing xunit traits dotnet-test

6
推荐指数
1
解决办法
670
查看次数

如何通过一次调用“dotnet test”正确生成 TRX 文件和代码覆盖率结果?

首先,一些背景信息:我有一个 Visual Studio 解决方案,其中包含几个生产类库和九个单元测试项目。所有项目都针对 .NET 5。我正在运行 .NET 5.0.401。所有单元测试项目都引用了coverlet.collector. 我不使用旧的coverlet.msbuild软件包。根据我的阅读,使用XPlat Code Coverage现在是 .NET Core 的惯用法。

我有一个用于 CI 构建的 Azure Pipelines 管道。作为此管道的一部分,我想运行所有单元测试,生成单元测试结果以上传到管道,并生成代码覆盖率结果以上传到管道。我已经阅读了几篇博客文章和文档,这些文章和文档似乎使这一切变得简单;然而,我发现事实并非如此。

让我们从在本地工作站上运行一些命令开始简单。出于本练习的目的,我们假设我已经使用以下命令成功构建了解决方案:

dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)

如果我运行这样的测试:

dotnet test Solution.sln --configuration Debug --no-build --no-restore --collect:"XPlat Code Coverage" --results-directory artifacts/test-results
Run Code Online (Sandbox Code Playgroud)

然后我看到代码覆盖率结果存储在以 GUID 命名的子目录中。我不知道微软为什么决定这样做,但这不是我所能控制的。

Cobertura 代码覆盖率结果

(运行此命令并截图后,我删除了该test-results目录。)

请记住,我还想生成单元测试结果。为此,我将--logger trx参数添加到同一命令行中。这次,创建了许多其他文件夹,其中包含看似重复的代码覆盖率结果。此外,我还得到了.trx我正在寻找的文件。

重复的代码覆盖率结果

您会注意到,除了.trx我想要的九个文件之外,还有另外九个代码覆盖率报告。

我的自托管 Pipelines 构建代理上会生成类似的重复文件。在管道中,如果我尝试执行以下任务:

dotnet build Solution.sln --configuration Debug
Run Code Online (Sandbox Code Playgroud)

我收到错误:

##[warning]Multiple file or directory matches were found. Using the …
Run Code Online (Sandbox Code Playgroud)

code-coverage dotnet-cli azure-pipelines dotnet-test

6
推荐指数
1
解决办法
4604
查看次数

Azure 管道上的 NUnit3 测试适配器警告

最近,在没有对测试解决方案进行任何直接更改的情况下,在我的 azure 管道上执行 VSTEST@2 任务期间开始出现此错误。

##[warning]DiscoveryMessage : Failed to load extensions from file 'D:\a\1\s\src\...\NUnit3.TestAdapter.dll'. Please use /diag for more information.
Run Code Online (Sandbox Code Playgroud)

它不会破坏测试发现或执行阶段,但它会破坏我的警告对话框,并可能使我忽略一些更重要的警告。到目前为止,你们中有人遇到过类似的问题吗?一段时间以来尝试寻找此类错误,但找不到任何解决方案。

我还认为,也许我的 vstest 任务尝试从 TestAdapter 发现测试,但定义中排除子句不应该是这种情况

  - task: VSTest@2
    inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2: |
                    **\*.Tests.dll
                    !**\*TestAdapter.dll
                    !**\NUnit3.TestAdapter.dll
                    !**\obj\**
      searchFolder: '$(System.DefaultWorkingDirectory)'
      distributionBatchType: basedOnExecutionTime
      codeCoverageEnabled: true
Run Code Online (Sandbox Code Playgroud)

nunit vstest azure-pipelines dotnet-test

6
推荐指数
0
解决办法
556
查看次数