Как правильно тестировать Пестера Import-Clixml - PullRequest
0 голосов
/ 19 мая 2018

Итак, прежде всего, я должен заявить, что я новичок в Pester и, возможно, не пишу свои тесты правильно или неправильно понимаю всю его функциональность.

Итак, фон - это то, что я хочу автоматизироватьмой модуль PowerShell с Пестером, и к настоящему времени я написал несколько тестов.

Часть моего модуля - сохранение настроек в файле 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 Ответ

0 голосов
/ 19 мая 2018

Я думаю, что вместо использования 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.

...