如何使用蛋糕构建系统查找项目类型?

问题描述

ITNOA

我使用 cake build system 自动构建我的解决方案,并且我想在我们的 CI 中自动测试我的项目,

我的NUnit项目有很多类型,比如asp.net dot net framework 4.6.1 or dot net core 2.1 or ...

我的问题是当我想用 NUnit3 cake dsl 运行我们的单元测试时,我们需要知道每个项目的 dll 路径,所以我需要知道每个项目的类型,因为例如对于 dot net core 2.1 dll 位于 netcoreapp 目录下,而对于另一个项目,dll 位于其他位置。

为了更好的演示,请看下图

Structure of my solution

正如您在测试解决方文件夹中看到的,我们有许多具有不同类型框架的测试项目和......(例如其中一个dotnetcore2.1一个dot net framework 4.6.1 等)

>

所以我的问题是如何找到项目类型?

有没有办法解决NUnit3自己找到的dll?

my GitHub discussion about this question

谢谢

解决方法

您应该为单元测试项目使用项目引用,而不是显式的 DLL 引用。

当您使用 .Net Core 时,请使用 XUnit 测试来为您的测试方法提供几乎相同的过程。

通过使用项目参考并将您的测试项目作为同一个解决方案 (sln) 文件的一部分,您将大大简化您的工作。

,

看起来您想要做的是获取单元测试的所有程序集列表,涵盖项目可能具有的任何目标。

如果是这种情况,您可以使用 GetFiles 别名来查找程序集,然后检查每个程序集的 FullPath 以检查 TFM...

var files = GetFiles("./**/*.Tests.dll");
foreach(var file in files)
{
    Information("File: {0}",file.FullPath);

    if (file.FullPath.Contains("/net461/")
    {
        // ... Assembly is for .NET 4.6.1
    }
    else if (file.FullPath.Contains("/netcoreapp2.1/")
    {
        // ... Assembly is for .NET Core 2.1
    }
    // etc...
}
,

您可以使用 globber 模式查找所有测试项目,不知道您的文件夹结构是否正确,但您可以执行以下操作

 Task("Test")
     .Does(() =>
 {
     var settings = new DotNetCoreTestSettings
     {
         Configuration = "Release"
     };

     var projectFiles = GetFiles("./**/Test/UnitTests/*.csproj");
     foreach(var file in projectFiles)
     {
         DotNetCoreTest(file.FullPath,settings);
     }
 });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...