2015-10-09 2 views
0

У меня есть простой, что на данный момент ничего не происходит, я только начинаю работать с Pester, но моя цель - высмеять Remove-ADGroupMember и несколько других команд PowerShell AD для тестирования.Pester BoundParams in CallHistory empty

Param(
    [string]$computerList = ".\\computers.csv", 
    [boolean]$isTest = $false 
) 

function Remove-Groups(){ 
    Remove-ADGroupMember -Identity "dale" -Members "dale","cameron" 
} 

и мой тестовый скрипт

$here = Split-Path -Parent $MyInvocation.MyCommand.Path 
$sut = "../" + (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".") 
. "$here\$sut" 

Describe "UninstallUnused - Remove-Groups" { 
    It "does something useful" { 
     Mock Remove-ADGroupMember 
     Remove-Groups 
     Assert-MockCalled Remove-ADGroupMember -Exactly 1 
     Assert-MockCalled Remove-ADGroupMember 1 -ParameterFilter {$Identity -eq "dale" -and $Members -contains "dale"} 
    } 
} 

Первая Assert-MockCalled линия работает, но независимо от того, что я стараюсь на второй испытания всегда терпит неудачу. Через некоторое время я вырыл в Funciton Утверждай-MockCalled с отладчиком, и это выглядит как значения параметра -Members теряются

enter image description here

На картинке выше я в Утверждай-MockCalled функции Mock.ps1 и, как вы видите, значения, переданные членам, отсутствуют. Если я передаю только одно значение методу Remove-ADGroupMember следующим образом: Remove-ADGroupMember -Identity "dale" -Members "dale" значение, которое я вижу в BoundParams, равно {} вместо {, }, как вы видите на скриншоте.

Является ли это проблемой с тем, как я это делаю или является проблемой, как читатель читает параметры и т. Д. Из Remove-ADGroupMember?

+0

Если вы только сделать второй 'Утверждай-MockCalled' это работает или являются' значения еще членов организации потеряли? – briantist

+0

Да ... Я прокомментировал первый оператор Assert-MockCalled и Members = {,} – Dale

ответ

1

Параметры Identity или Members имеют тип String, поэтому ваши утверждения не работают.

  • Идентичность - Microsoft.ActiveDirectory.Management.ADGroup
  • Пользователи - Microsoft.ActiveDirectory.Management.ADPrincipal []

Так что для того, чтобы сделать работу фильтра вам нужно бросить в строку (типы, к счастью сериализации именам вам нужно)

function Remove-Groups(){ 
    Remove-ADGroupMember -Identity "dale" -Members "dale","cameron" 
} 

Describe "UninstallUnused - Remove-Groups" { 
    It "does something useful" { 
     Mock Remove-ADGroupMember 
     Remove-Groups 
     Assert-MockCalled Remove-ADGroupMember -Exactly 1 
     Assert-MockCalled Remove-ADGroupMember 1 -ParameterFilter { 
     Write-Host ($identity.GetType(),$members.GetType()) ; #otputting the data types 
     ([string[]]$members) -contains "dale" -and ([string]$identity) -eq "dale" } 
    } 
} 

Edit: вы могли аль поэтому использовать автоматическую отливку на левый параметр, но это делает код легче сломать:

([string[]]$members -contains "dale") -and ("dale" -eq $identity) 
+0

** Да, это сработало спасибо **. Я думал, что, поскольку я передавал строку на вызов Remove-ADGroupMember, мне пришлось бы тестировать строку. – Dale