0
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
    }
}

我的.tests.ps1

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

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

在此处输入图像描述

4

2 回答 2

1

当你标记一个参数Mandatory时,你必须给它提供一个输入值——否则它会提示你输入一个值。

来自Get-Help about_Parameters

 参数属性表
 [...]
   参数 必填?
     此设置指示该参数是否为必填项,即
     是,是否所有使用此 cmdlet 的命令都必须包含此
     范围。当值为“True”且参数缺失时
     在该命令中,Windows PowerShell 会提示您输入
     参数。

将您的测试更改为:

Describe -Tags "Example" "Palindrome1" {
    It "does something useful" {
        Palindrome1 -param "value goes here" | Should Be $true
    }
}
于 2016-08-15T12:57:11.907 回答
1

如果你像这样更新你的参数块

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

您的测试将按预期失败,而不会提示输入。

于 2017-05-11T14:10:39.263 回答