Functions/Invoke-DotNetTests.ps1

function Invoke-DotNetTests {

    [CmdletBinding(DefaultParameterSetName = 'FolderName')]
    param(
        [Parameter(Mandatory = $true, ParameterSetName = "SolutionFilename")]
        [String] $SolutionFilename,
        [Parameter(Mandatory = $false, ParameterSetName = "FolderName")]
        [String] $Folder,
        [Parameter(Mandatory = $true, ParameterSetName = "ProjectFilename")]
        [String] $ProjectFilename,
        [Parameter(Mandatory = $false)]
        [String] $Configuration = "Release",
        [Parameter(Mandatory = $false)]
        [String] $ResultsFilePath,
        [Parameter(Mandatory = $false)]
        [String] $Filter
    )

    $spacer = "".PadRight(80, "#")
    if ($PSCmdlet.ParameterSetName -eq "Folder") {
        if (-not $Folder) { $Folder = $pwd }
        $Folder = Resolve-Path -Path $Folder
        $SolutionFilename = Get-ChildItem $Folder -Filter *.sln | Select-Object -First 1 -ExpandProperty FullName
        $TestSourceFilename = $SolutionFilename
    }
    if ($PSCmdlet.ParameterSetName -eq "SolutionFilename") {
        $SolutionFilename = Resolve-Path -Path $ProjectFilename
        $Folder = [IO.Path]::GetDirectoryName($SolutionFilename)
        $TestSourceFilename = $SolutionFilename
    }
    if ($PSCmdlet.ParameterSetName -eq "ProjectFilename") {
        $ProjectFilename = Resolve-Path -Path $ProjectFilename
        $Folder = [IO.Path]::GetDirectoryName($ProjectFilename)
        $TestSourceFilename = $ProjectFilename
    }

    if (-not $ResultsFilePath) {
        $ResultsFilePath = "$Folder\test-results-{framework}.xml"
    }

    Write-Host "$spacer"
    Write-Host "Running tests for '$TestSourceFilename'"
    Write-Host "$spacer"
    $runArgs = @(
        "test"
        "$TestSourceFilename"
        "-c", $Configuration
        "--logger", "xunit;LogFilePath=$ResultsFilePath"
        "--no-restore"
        "--no-build"
    )
    if ($Filter) {
        $runArgs += @("--filter", $Filter)
    }
    & dotnet @runArgs

}

Export-ModuleMember 'Invoke-DotNetTests'