AppVeyor忽略单元测试的显式组件名称

时间:2018-01-12 19:58:12

标签: c# .net unit-testing appveyor

我正在尝试为我的项目设置AppVeyor(here),我似乎无法找到让它从.NET Core Unit测试项目运行测试的方法。

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

我还有一个.NET Framework Unit测试项目,它执行一些基于GPU的测试,因此它们在运行AppVeyor时会失败,因为它们缺少CUDA GPU和所需的cuDNN文件。

这是我的配置:

version: 1.0.{build}
image: Visual Studio 2017
before_build:
- cmd: dotnet restore
build:
  verbosity: minimal
test:
  assemblies:
    only:
    - NeuralNetwork.NET.Unit.dll
  categories:
    except:
    - NetworkTest
  

跳过的NetworkTest类别只是一组非常占用CPU的测试,需要一些时间才能运行,因此我现在只是跳过它们以使构建更快完成。

项目构建正常,但AppVeyor也继续在其他NeuralNetwork.NET.Cuda.Unit.dll程序集中运行测试,这会按预期失败并导致整个构建被标记为失败。

所以我的问题是:

  • 我在这里做错了吗?为什么不尊重装配约束?
  • 还有另一种方法让AppVeyor只运行NeuralNetwork.NET.Unit.dll的测试吗?

编辑:我尝试设置“所有程序集排除”选项以及所有这些组合以指定要跳过的.NET Framework单元测试项目:

  • NeuralNetwork.NET.Cuda.Unit.dll
  • ** \ *。NeuralNetwork.NET.Cuda.Unit.dll
  • ** \ NeuralNetwork.NET.Cuda.Unit.dll

测试一直在执行(按预期失败),我在这里遗漏了什么吗?

编辑#2:这是我现在使用的解决方法,我手动排除了.NET Framework项目中的所有测试类别,到目前为止这似乎正在运行(甚至如果看起来不那么干净):

version: 1.0.{build}
image: Visual Studio 2017
configuration: Release
before_build:
- cmd: dotnet restore
build:
  verbosity: minimal
test:
  categories:
    except:
    - CuDnnInceptionLayerTest
    - CuDnnLayersTest
    - GpuExtensionsTest
    - SerializationTest

1 个答案:

答案 0 :(得分:1)

.NET Core测试检测与检测经典.NET Framework测试的工作方式不同。在搜索.NET Core测试时,AppVeyor会查找具有某些属性的Resources exceeded during execution: The query could not be executed in the allotted memory. ORDER BY operator used too much memory.文件,而不是查找程序集。程序集筛选器不适用于.NET Core测试(但类别筛选器可用)。

抱歉混淆。创建this issue以实现类似于程序集名称过滤的行为,但基于.csproj文件名进行.NET Core测试自动检测。

现在解决方法是做一个“黑名单”,例如列出您不希望在.csproj下运行的所有.NET Framework程序集。您可以使用通配符语法使其更加紧凑,如here所述。