Pester 中的 Assert-MockCalled 与 Assert-VerifiableMocks
Assert-MockCalled vs Assert-VerifiableMocks in Pester
是什么让 Assert-VerifiableMocks 与 Pester 中的 Assert-MockCalled 不同?我一直在阅读
- https://github.com/pester/Pester/wiki/Assert-VerifiableMocks
- https://github.com/pester/Pester/wiki/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')"
}
使用 Assert-VerifiableMocks:
Mock Invoke-MongoCommand {} -Verifiable -ParameterFilter {
$Expression -eq "db.dropUser('$test_username')"
}
Set-TargetResource -UserName $test_username -Ensure "Absent"
Assert-VerifiableMocks
在您的示例中,它们是相同的,但它是关于您要检查的方式和内容。例如,您想检查是否没有调用某些东西。您可能会使用:
Assert-MockCalled xxx -Times 0 -ParameterFilter {$x -eq "foo"}
这对于 Assert-VerifiableMocks 是不可能的
Assert-VerifiableMocks
的功能不是 Assert-MockCalled
的子集,它是一个不相交的集合。使用 Assert-VerifiableMocks
您可以验证同时调用了许多模拟,但如前所述,您无法验证未调用任何模拟。我在下面有一个例子来更全面地解释这两个差异测试一个例子 'Get-ValueSum'.
如果您注意到 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
}
}
Assert-MockCalled 样本
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
}
}
是什么让 Assert-VerifiableMocks 与 Pester 中的 Assert-MockCalled 不同?我一直在阅读
- https://github.com/pester/Pester/wiki/Assert-VerifiableMocks
- https://github.com/pester/Pester/wiki/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')"
}
使用 Assert-VerifiableMocks:
Mock Invoke-MongoCommand {} -Verifiable -ParameterFilter {
$Expression -eq "db.dropUser('$test_username')"
}
Set-TargetResource -UserName $test_username -Ensure "Absent"
Assert-VerifiableMocks
在您的示例中,它们是相同的,但它是关于您要检查的方式和内容。例如,您想检查是否没有调用某些东西。您可能会使用:
Assert-MockCalled xxx -Times 0 -ParameterFilter {$x -eq "foo"}
这对于 Assert-VerifiableMocks 是不可能的
Assert-VerifiableMocks
的功能不是 Assert-MockCalled
的子集,它是一个不相交的集合。使用 Assert-VerifiableMocks
您可以验证同时调用了许多模拟,但如前所述,您无法验证未调用任何模拟。我在下面有一个例子来更全面地解释这两个差异测试一个例子 'Get-ValueSum'.
如果您注意到 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
}
}
Assert-MockCalled 样本
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
}
}