Тестирование Pester PowerShell с запросом на ввод ввода несколько раз

function Palindrome1
{
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string] $param
    )

    [string] $ReversString
    $StringLength = @()

    $StringLength = $param.Length

    while ($StringLength -ge 0)
    {
        $ReversString = $ReversString + $param[$StringLength]
        $StringLength--
    }

    if ($ReversString -eq $param)
    {
        return $true
    }
    else
    {
        return $false
    }
}

My .tests.ps1

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
. "$here\Palindrome1.ps1"

Describe -Tags "Example" "Palindrome1" {
    It "does something useful" {
        Palindrome1 | Should Be $true
    }
}

Введите здесь описание изображения


person Developer    schedule 15.08.2016    source источник


Ответы (2)


Когда вы отмечаете параметр Mandatory, вы ДОЛЖНЫ предоставить ему входное значение, иначе он предложит вам ввести его.

Из Get-Help about_Parameters:


 PARAMETER ATTRIBUTE TABLE
 [...] 
   Parameter Required?
     This setting indicates whether the parameter is mandatory, that
     is, whether all commands that use this cmdlet must include this
     parameter. When the value is "True" and the parameter is missing
     from the command, Windows PowerShell prompts you for a value for
     the parameter.

Измените свой тест на:

Describe -Tags "Example" "Palindrome1" {
    It "does something useful" {
        Palindrome1 -param "value goes here" | Should Be $true
    }
}
person Mathias R. Jessen    schedule 15.08.2016
comment
Огромное спасибо, Матиас - person Developer; 15.08.2016
comment
Привет, но тестовый пример не работает, когда я передаю радар в качестве ввода любой идеи - person Developer; 15.08.2016
comment
@Dotnet Все еще имеет тот же недостаток, что и в другом вопросе, который вы опубликовали ([string] $ReversString все еще приводит к пустой строке) - person Mathias R. Jessen; 15.08.2016
comment
Я сделал это, чтобы очистить, но я не мог увидеть ожидаемый результат - person Developer; 15.08.2016
comment
@Dotnet Если я возьму вашу функцию такой, какая она есть в вашем вопросе, измените $ReversString, как это предлагается в другом ответе, а затем запустите свои тесты с радаром в качестве входного параметра, он работает (+ тест прошел успешно) - person Mathias R. Jessen; 15.08.2016
comment
Ты хочешь сказать так Palindrome1 -param "radar" | Should Be $true - person Developer; 15.08.2016
comment
Но вместо этого, если я хотел бы прочитать его из команды, возможно ли это? - person Developer; 15.08.2016
comment
Давайте продолжим обсуждение в чате. - person Mathias R. Jessen; 15.08.2016

Если вы обновите свой блок параметров следующим образом

param (
    [ValidateNotNullorEmpty()]
    [string] $param = $(throw "a parameter is required")
)

Ваш тест завершится неудачно, как и ожидалось, без запроса ввода.

person Jonathan Walz    schedule 11.05.2017