В настоящее время у меня есть сценарий сборки Cake, позволяющий создавать отдельные проекты в моем решении и запускать тесты xUnit для этих проектов. Я не видел документации или примеров использования приложения Xamarin Unit Test или тестов пользовательского интерфейса для создания библиотеки DLL и запуска их с помощью Cake. Мне было интересно, возможно ли такое, и если да, то как? Сценарий моего торта:

#addin "Cake.Xamarin"
#tool "nuget:?package=xunit.runner.console"
#addin "nuget:?package=HyperLinq"
#addin "nuget:?package=XunitXmlResultParser"

//using XunitXmlResultParser;
// Arguments.
var target = Argument ("target", "Default");
var configuration = Argument ("configuration", "release");

// Define directories.
var solutionFile = GetFiles ("./OSP_POC.sln").First ();

// Android and iOS.
var androidProject = GetFiles ("./OSP_POC/OSP_POC.Android/*.csproj").First ();
var iOSProject = GetFiles ("./OSP_POC/OSP_POC.iOS/*.csproj").First ();

// stylecop settings file
var settingsFile = File ("Settings.stylecop");

// xml results file
var resultFile = File ("StylecopResults.xml");
// html report file
var htmlFile = File ("StylecopResults.html");
// Tests.
var testsProject = GetFiles ("./OSP_UnitTests/OSP_UnitTests.csproj").First ();
// NOTE: (assumes Tests projects end with .Tests).
var testsDllPath = string.Format ("./OSP_UnitTests/bin/{0}/netcoreapp2.0/OSP_UnitTests.dll", configuration);

// Output folders.
var artifactsDirectory = Directory ("./artifacts");

Task ("Clean")
    .Does (() => {
        CleanDirectories (string.Format ("./**/obj/{0}",
            configuration));
        CleanDirectories (string.Format ("./**/bin/{0}",
            configuration));

        Information ("Finished cleaning");
    });

Task ("Restore-Packages")
    .Does (() => {
        NuGetRestore (solutionFile);
    });

/*Task("StyleCop")
  .Does(() =>
{
    StyleCopAnalyse(settings => settings
        .WithSolution(solutionFile)
        .WithSettings(settingsFile)
        .ToResultFile(resultFile)
        .ToHtmlReport(htmlFile)
    );
});*/

Task ("Run-Tests")
    // Allows the build process to continue even if there Tests aren't passing.
    .ContinueOnError ()
    .IsDependentOn ("Prepare-Build")
    .Does (() => {
        Information ("running tests");
        Information ($"{testsProject.FullPath}");
        MSBuild (testsProject.FullPath, settings => settings
            .SetConfiguration (configuration)
            .WithTarget ("Build")
            .SetVerbosity (Verbosity.Minimal));
        DotNetCoreTool (testsProject,
            "xunit",
            "--no-build -noshadow -xml ../artifacts/report.xml -html ../artifacts/report.html -configuration " + configuration);

        /*var setting =  new DotNetCoreTestSettings{
                Configuration = configuration,
                ResultsDirectory = artifactsDirectory,
                NoBuild = true
            };
            DotNetCoreTest(testsProject.FullPath, setting);
     */
        /*XUnit2(testsDllPath, 
            new XUnit2Settings
            {
                HtmlReport = true,
                OutputDirectory = artifactsDirectory
            });*/
    });

Task("Package-Results")
    .IsDependentOn("Run-Tests")
    .Does (() => {
        var resultFile = GetFiles ("./artifacts/report.xml").First ().FullPath;
        var parser = new XunitXmlResultParser.XParser ("IFS FSMx Test Results", resultFile, "./artifacts/test_results.html");
        parser.Parse();
        //var results =  GetFiles("./artifacts/*.html");
        //CopyFiles(results, @"\\mkenas21\metrix$\RnD\Mobile\Osprey\build_results\");
    });

Task ("Prepare-Build")
    .IsDependentOn ("Clean")
    .IsDependentOn ("Restore-Packages")
    .Does (() => { });

Task ("Build-Android")
    .IsDependentOn ("Prepare-Build")
    .Does (() => {
        MSBuild (androidProject, settings =>
            settings.SetConfiguration (configuration)
            .WithProperty ("DebugSymbols", "false")
            .WithProperty ("TreatWarningsAsErrors", "false")
            .WithTarget ("SignAndroidPackage")
            .SetVerbosity (Verbosity.Minimal));
    });

Task ("Build-iOS")
    .IsDependentOn ("Prepare-Build")
    .Does (() => {
        MSBuild (iOSProject, settings =>
            settings.SetConfiguration (configuration)
            .WithProperty ("Platform", "iPhoneSimulator")
            .WithProperty ("OutputPath", $"bin/iPhoneSimulator/{configuration}/")
            .WithProperty ("DebugSymbols", "false")
            .WithProperty ("TreatWarningsAsErrors", "false")
            .SetVerbosity (Verbosity.Minimal));
    });

Task ("Build-Solution")
    .IsDependentOn ("Build-Android")
    .IsDependentOn ("Build-iOS")
    .Does (() => { });

Task ("Default")
    .IsDependentOn ("Build-Solution")
    .IsDependentOn ("Run-Tests")
    .IsDependentOn ("Package-Results");

RunTarget (target);
1
Trejon House 30 Апр 2018 в 18:41

1 ответ

Лучший ответ

Мне удалось запустить тесты с помощью xUnit со следующим. Что я не решил, так это запустить его в целевом средстве (iOS или Android). Но это выполняет мои модульные тесты .NET Core.

DotNetCoreTest(UnitTestProjectPath, new DotNetCoreTestSettings
{ 
    Configuration = "<Build Configuration>" 
});
1
Sebastian D'Agostino 22 Июн 2018 в 00:46