AppVeyor Tests窗口(和徽章)中未显示.NET Core Unit测试

时间:2018-01-12 23:23:54

标签: c# .net unit-testing appveyor

关于这个问题,我目前正在为我的项目设置AppVeyor(here),我的.NET Core测试只显示在控制台输出中,但不显示在测试窗口中。

这是AppVeyor项目的链接:ci.appveyor.com/project/Sergio0694/neuralnetwork-net

如果某些测试失败,控制台会正确显示错误,并且构建标记为失败,但测试窗口仍为空。来自shields.io的徽章也是如此,它显示了0次总测试,即使我可以看到其中许多是从控制台输出执行的。

这是控制台输出: enter image description here

这是测试窗口: enter image description here

我是否还需要设置其他内容才能在控制台窗口之外正确报告?

3 个答案:

答案 0 :(得分:3)

请将https://www.nuget.org/packages/Appveyor.TestLogger添加到测试项目中。

答案 1 :(得分:1)

您可以将AppVeyor.TestLogger包添加到项目中,但可以在不更改代码的情况下完成。您需要将测试结果输出为AppVeyor能够理解的xml文件格式,然后将其上载到HTTP API。以下powershell代码段将遍历您的解决方案并查找每个测试项目,在csproj上调用dotnet test并将输出记录到test-result.trx,然后将该文件上载到AppVeyor。

$config = "release"

# Find each test project and run tests and upload results to AppVeyor
Get-ChildItem .\**\*.csproj -Recurse | 
    Where-Object { $_.Name -match ".*Test(s)?.csproj$"} | 
    ForEach-Object { 

        # Run dotnet test on the project and output the results in mstest format (also works for other frameworks like nunit)
        & dotnet test $_.FullName --configuration $config --no-build --no-restore --logger "trx;LogFileName=..\..\test-result.trx" 

        # if on build server upload results to AppVeyor
        if ("${ENV:APPVEYOR_JOB_ID}" -ne "") {
            $wc = New-Object 'System.Net.WebClient'
            $wc.UploadFile("https://ci.appveyor.com/api/testresults/mstest/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\test-result.trx)) 
        }

        # don't leave the test results lying around
        Remove-Item .\test-result.trx -ErrorAction SilentlyContinue
}

答案 2 :(得分:1)

可以在测试脚本中执行以下操作,将其添加到测试项目中来,这可能是更清洁的选择:

cd <test_project_dir>
nuget install Appveyor.TestLogger -Version 2.0.0
cd ..
dotnet test --no-build --no-restore --test-adapter-path:. --logger:Appveyor <test_project_dir>

这与添加引用具有相同的效果,因为它使testlogger二进制文件可用于测试框架,但实际上并没有更改测试项目,因此不需要使用非Appveyor的人进行安装他们克隆并构建您的仓库时的软件包。

此解决方案相对于输出并随后上传.trx文件(如上面的PS脚本)的轻微优势是,您应该实时获取测试结果,而不是最后获取全部结果。

示例appveyor.yml:

version: 0.0.{build}
build_script:
- cmd: dotnet build MySolution.sln
test_script:
- cmd: cd Test
- cmd: nuget install Appveyor.TestLogger -Version 2.0.0
- cmd: cd ..
- cmd: dotnet test --no-build --no-restore --test-adapter-path:. --logger:Appveyor Test