我正在编写一个辅助函数以登录到Azure。我可以用Connect-AzAccount
或-SubscriptionId
叫-SubscriptionName
,但不能两者都叫。
我该如何模拟?我已经尝试过...
Mock Connect-AzAccount { return @{Name = 'Fake Name'} } -ParameterFilter { $SubscriptionId } -Verifiable
Assert-LoginAzureAz -SubscriptionName '0123'
我尝试过...
Mock Connect-AzAccount { return @{Name = 'Fake Name'} } -ParameterFilter { '0123' -eq $SubscriptionId } -Verifiable
Assert-LoginAzureAz -SubscriptionName '0123'
我尝试过...
Mock Connect-AzAccount { return @{Name = 'Fake Name'} } -ParameterFilter { $null -eq $SubscriptionId } -Verifiable
Assert-LoginAzureAz -SubscriptionName '0123'
但是所有这些都过去了。我需要创建两个模拟吗?我如何断定负面人物没有被打来?我可以将Assert-MockCalled
与两个不同的Mocks一起使用吗?
编辑: 添加我尝试过的其他测试...
Mock Connect-AzAccount { throw 'Called Connect-AzAccount by SubscriptionName' } -ParameterFilter { $SubscriptionName }
Mock Connect-AzAccount { return @{Name = 'Fake Name'} } -ParameterFilter { $SubscriptionId } -Verifiable
Assert-LoginAzureAz -SubscriptionName '0123'
仍然通过。
答案 0 :(得分:0)
以下作品:
Mock Connect-AzAccount { if([string]::IsNullOrWhitespace($SubscriptionId)) {throw 'Called Connect-AzAccount by SubscriptionName'} else {return @{Name = 'Fake Name'}} } -ParameterFilter { $null -ne $SubscriptionId } -Verifiable
Assert-LoginAzureAz -SubscriptionId '0123' ### Passes
Assert-LoginAzureAz -SubscriptionName '0123' ### Fails
重置Mocks不是一个好主意(我什至不确定它是否受支持)。而且因为它是一个参数PS会以String.Empty的值启动它们(是的,即使您将默认值设置为[string] $SubscriptionId = [NullString]::Value
也是如此)。
所以我们必须在Mock中测试IsNullOrWhitespace并抛出错误。