如何在 Pester 中比较两个数组与自定义对象

Dar*_*te1 3 arrays powershell compare pester

我们正在努力让 Pester 测试失败或通过,具体objects取决于array.

测试.ps1

#require Assert
#require Pester

$Expected = @(
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
)
$Actual = @(
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
)

Describe 'comparing arrays' {
    Context 'Assert-Equivalent' {
        it 'should be green' {           
            Assert-Equivalent -Actual $Expected -Expected $Expected
        }
        it 'should be green' {        
            Assert-Equivalent -Actual $Actual -Expected $Expected
        }
        it 'should be red' {        
            $Wrong = @(
                [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
                [PSCustomObject]@{Name1 = 'WROMG';Name2 = 'Text2'}
            )
            Assert-Equivalent -Actual $Wrong -Expected $Expected
        }
    }
    Context 'Should be' {
        it 'should be green' {
            $Expected | Should -Be $Expected
        }
        it 'should be green' {
            $Actual | Should -Be $Expected
        }
        it 'should be red' {        
            $Wrong = @(
                [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
                [PSCustomObject]@{Name1 = 'WROMG';Name2 = 'Text2'}
            )
            $Wrong | Should -Be $Expected
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们似乎无法解决这个问题。我们是否使用了错误的 CmdLets?或者还有其他方法可以检查这个吗?有时,它array也只是另一个对象的属性。所以需要进行深入的比较。

小智 5

当我想将一些“复杂”对象与 Pester 进行比较时,我使用ConvertTo-Json。这并不理想,因为如果类型不匹配,可能会出现一些误报,但它通常可以完成工作。

$Expected = @(
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
)
$Actual = @(
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
    [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
)

Describe 'comparing arrays' {
    Context 'Assert-Equivalent' {
        it 'should be green' {           
            Assert-Equivalent -Actual ($Expected | ConvertTo-Json)  -Expected ($Expected | ConvertTo-Json) 
        }
        it 'should be green' {        
            Assert-Equivalent -Actual ($Actual | ConvertTo-Json)  -Expected ($Expected | ConvertTo-Json) 
        }
        it 'should be red' {        
            $Wrong = @(
                [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
                [PSCustomObject]@{Name1 = 'WROMG';Name2 = 'Text2'}
            )
            Assert-Equivalent -Actual ($Wrong | ConvertTo-Json)  -Expected ($Expected | ConvertTo-Json) 
        }
    }
    Context 'Should be' {
        it 'should be green' {
            ($Expected | ConvertTo-Json) | Should -Be ($Expected | ConvertTo-Json)
        }
        it 'should be green' {
            ($Actual | ConvertTo-Json) | Should -Be ($Expected | ConvertTo-Json)
        }
        it 'should be red' {        
            $Wrong = @(
                [PSCustomObject]@{Name1 = 'Text1';Name2 = 'Text2'}
                [PSCustomObject]@{Name1 = 'WROMG';Name2 = 'Text2'}
            )
            ($Wrong | ConvertTo-Json) | Should -Be ($Expected | ConvertTo-Json)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)