Как правильно приставать тест import-clixml
Поэтому прежде всего я должен сказать, что я новичок в Pester и, возможно, неправильно пишу свои тесты или неправильно понимаю все его функциональные возможности.
Итак, я хочу автоматизировать свой модуль powershell с помощью pester и написать несколько тестов.
Часть моего модуля сохраняет конфигурационные данные в файле clixml. Я хотел бы написать набор тестов, чтобы убедиться, что сохранение и захват конфигурации работают как ожидалось.
в основном у меня есть одна функция, чтобы сохранить файл конфигурации и одна, чтобы получить его. Мой тест на вредителей выглядит следующим образом:
BeforeAll{
if(Test-path existingconfigfile.xml){
Rename-Item -Path "existingconfigfile" -NewName "backup.xml"
}
Save-configfunction -param1 'Value1' -param2 'Value2'
#saves as test.xml
}
Afterall{
if(Test-path backup.xml){
#remove mocked test file
Remove-Item -Path "test.xml" -Force
#place original back
Rename-Item -Path "backup.xml" -NewName "existingconfigfile.xml"
}
}
it "importconfig should return expected values for mocked object" {
{
$result = Get-config
$result
$result.Containsvalue('Value1') | Should be $true
}
}
Теперь я попробовал несколько вариантов блока it:
it "importconfig should return expected values for mocked object" {
{
$result = Get-config
$result.param1 | Should be "Value1"
}
}
it "importconfig should return expected values for mocked object" {
$result = Get-Config
$result | Should match 'Value1'
$result | Should match 'Value2'
}
it "importconfig should return expected values for mocked object" {
$result = Get-Config
$result.Param1 | Should match 'Value1'
$result.Param2 | Should match 'Value2'
}
То, что происходит, - то, что Пестер всегда возвращает пройденный тест. Даже если я изменю значения соответствия на неправильные. Пестер делает это во всех сценариях. Поэтому по какой-то причине Пестер не правильно оценивает значения и всегда возвращает положительный результат.
Поэтому я хотел бы знать, что я делаю неправильно. Очевидно, что Пестер должен пройти тест, если значения действительно совпадают, но должен потерпеть неудачу, если они не совпадают
1 ответ
Я думаю, вместо того, чтобы использовать BeforeAll
а также AfterAll
создавать Mock
Поведение типа для изменения конфигурации, я бы использовал фактический Mock
заявления. Вот что я имею в виду (я создал простые представления о том, что, как я полагаю, ваши функции выполняют, поскольку вы не поделились ими):
function Set-Config {
Param(
$Config
)
$Config | Export-Clixml C:\Temp\production_config.xml
}
function Get-Config {
Import-Clixml C:\Temp\production_config.xml
}
Describe 'Config function tests' {
Mock Set-Config {
$Config | Export-Clixml TestDrive:\test_config.xml
}
Mock Get-Config {
Import-Clixml TestDrive:\test_config.xml
}
$Config = @{
Setting1 = 'Blah'
Setting2 = 'Hello'
}
It 'Sets config successfully' {
{ Set-Config -Config $Config } | Should -Not -Throw
}
$RetrievedConfig = Get-Config
It 'Gets config successfully' {
$RetrievedConfig.Setting1 | Should -Be 'Blah'
$RetrievedConfig.Setting2 | Should -Be 'Hello'
}
}
Это создает издевательства Get-Config
а также Set-Config
функции, которые перенаправляют запись / чтение конфигурации в TestDrive:\, который представляет собой специальную временную область диска, которую Pester предоставляет и очищает автоматически после этого.
Обратите внимание, что это имеет смысл только при тестировании родительской функции, которая использует эти функции. Если вы писали тесты Get-Config
а также Set-Config
функции сами по себе, то вы вместо этого хотели бы издеваться над Export-CliXml
а также Import-CliXml
команды.