[英]Assert-MockCalled vs Assert-VerifiableMocks in Pester
What makes Assert-VerifiableMocks different from Assert-MockCalled in Pester?是什么让 Assert-VerifiableMocks 与 Pester 中的 Assert-MockCalled 不同? I've been reading我一直在阅读
but still wonder: are the following sections of code equivalent and interchangeable?但仍然想知道:以下代码段是否等效并可互换?
Using Assert-MockCalled:使用 Assert-MockCalled:
Mock Invoke-MongoCommmand {}
Set-TargetResource -UserName $test_username -Ensure "Absent"
Assert-MockCalled Invoke-MongoCommand -ParameterFilter {
$Expression -eq "db.dropUser('$test_username')"
}
Using Assert-VerifiableMocks:使用 Assert-VerifiableMocks:
Mock Invoke-MongoCommand {} -Verifiable -ParameterFilter {
$Expression -eq "db.dropUser('$test_username')"
}
Set-TargetResource -UserName $test_username -Ensure "Absent"
Assert-VerifiableMocks
The functionality of Assert-VerifiableMocks
isn't a subset of Assert-MockCalled
it's a disjoint set.的功能Assert-VerifiableMocks
不是一个子集Assert-MockCalled
这是一个不相交集。 With Assert-VerifiableMocks
you can verify many mocks are called at the same time, but as already mentioned you cannot verify any mocks are not called.使用Assert-VerifiableMocks
您可以验证同时调用多个Assert-VerifiableMocks
,但如前所述,您无法验证未调用任何模拟。 I have an example below to more fully explain these two differences testing an example 'Get-ValueSum'.我在下面有一个示例来更全面地解释这两个差异,测试示例“Get-ValueSum”。
If you notice with Assert-verifiableMocks
you can verify that the test has called all the expected mocks in a single assert.如果您注意到Assert-verifiableMocks
您可以验证测试是否在单个断言中调用了所有预期的模拟。
describe 'Assert-MockCalled vs Assert-VerifiableMocks in Pester' {
function Get-Value1{ 1}
function Get-Value2{ 2}
function Get-Value3{ 3}
# Should never be called by Get-ValueSum
function Get-Value4{ 4}
# Sums Value 1, 2 & 3, but 4 only if $include4 is specified
function Get-ValueSum
{
param([switch] $inclued4 )
if($inclued4)
{
return (Get-Value1) + (Get-Value2) + (Get-Value3) + (Get-Value4)
}
else
{
return (Get-Value1) + (Get-Value2) + (Get-Value3)
}
}
context 'assert verifiable' {
# Mark the first 3 mocks as verifiable
# because they should not be called
mock -CommandName Get-Value1 -MockWith { 2} -Verifiable
mock -CommandName Get-Value2 -MockWith { 3} -Verifiable
mock -CommandName Get-Value3 -MockWith { 4} -Verifiable
# Add this so we can verify it is not called
mock -CommandName Get-Value4 -MockWith { 99}
$result = Get-ValueSum
it 'Should call the 3 expected value calls' {
Assert-VerifiableMock
}
it 'should not call get-value 4' {
Assert-MockCalled -CommandName Get-Value4 -Times 0
}
it 'should have gotten a sum of 9' {
$result | should be 9
}
# add test for #$include4
}
}
describe 'Assert-MockCalled vs Assert-VerifiableMocks in Pester' {
function Get-Value1{ 1}
function Get-Value2{ 2}
function Get-Value3{ 3}
# Should never be called by Get-ValueSum
function Get-Value4{ 4}
# Sums Value 1, 2 & 3, but 4 only if $include4 is specified
function Get-ValueSum
{
param([switch] $inclued4 )
if($inclued4)
{
return (Get-Value1) + (Get-Value2) + (Get-Value3) + (Get-Value4)
}
else
{
return (Get-Value1) + (Get-Value2) + (Get-Value3)
}
}
context 'assert mock called method' {
# Add all mocks so we can verify
# if they were called or not individually
mock -CommandName Get-Value1 -MockWith { 3}
mock -CommandName Get-Value2 -MockWith { 4}
mock -CommandName Get-Value3 -MockWith { 5}
mock -CommandName Get-Value4 -MockWith { 99}
$result = Get-ValueSum
it 'Should call the 3 expected value calls' {
Assert-MockCalled -CommandName Get-Value1 -Times 1
Assert-MockCalled -CommandName Get-Value2 -Times 1
Assert-MockCalled -CommandName Get-Value3 -Times 1
}
it 'should not call get-value 4' {
Assert-MockCalled -CommandName Get-Value4 -Times 0
}
it 'should have gotten a sum of 12' {
$result | should be 12
}
# add test for #$include4
}
}
In your sample they are the same, however it is about how and what you want to check.在您的示例中,它们是相同的,但它是关于您要检查的方式和内容。 For example, you want to check if something is not called.例如,您想检查是否未调用某些内容。 You would probably use:你可能会使用:
Assert-MockCalled xxx -Times 0 -ParameterFilter {$x -eq "foo"}
This would be impossible with Assert-VerifiableMocks这对于 Assert-VerifiableMocks 是不可能的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.