Модульное тестирование с Пестером - PullRequest
0 голосов
/ 17 января 2019

Я понимаю теории, но мне нужна небольшая помощь на практике, когда дело доходит до тестирования.

Так что я все еще нахожусь в процессе обучения тестированию в целом, и после некоторого исследования я могу видеть, что покрытие кода генерируется тем, сколько тестируется каждая строка кода. Я также изучаю c # sharp и совершенствую свои навыки написания сценариев в процессе. Я также понимаю, что вы обычно хотите смоделировать любые зависимости, когда дело доходит до модульного тестирования метода, который опирается на другой метод или класс. В данном случае это функция или командлет, поскольку он является PowerShell (изучение этих вопросов показывает, как много я могу сделать в c #)

Все, о чем я прошу, - это небольшая помощь в определении вещей, которые нужно осмеять, и сколько тестов я должен написать? Я знаю, это звучит субъективно, но я пытаюсь получить общее представление и наилучшую практику для себя. Я постоянно слышу от своих коллег, что TDD - это путь, и он значительно ускоряет процесс разработки / создания сценариев, так как обнаруживает ошибки на ранних этапах, к которым вы все равно собираетесь прибегать, но не нужно тестировать вручную. Сначала я пытаюсь научиться делать тесты, но мне нужно немного руководства. Я прошу прощения, если я выгляжу как скраб. Мне просто нужно подтверждение, что я учусь правильно.

Чтобы прояснить мои вопросы:

Я правильно определяю, что мне нужно для насмешки?

Что я пропустил или мог бы определить лучше?

Я правильно определяю, что мне нужно для проверки?

Что я ищу в ответе:

Вот то, что вы пропустили / облажались / могли бы определить лучше

Код, который я тестирую

Функция 1

function New-ServiceSnapshot {
[CmdletBinding()]
param (
    # path to export to 
    [Parameter(Mandatory=$true)]
    [string]$ServiceExportPath
)
    $results = get-service
    $results | Export-Csv -Path $ServiceExportPath -NoTypeInformation 
}

В функции 1 на первый взгляд я смотрю на нее и вижу 2 зависимости. Я хотел бы смоделировать get-service и использовать фиктивные данные для этого. Я сделал это с помощью import-csv из реальных фиктивных данных в реальный объект, который будет проверен. Для того, чтобы проверить экспорт, я понятия не имею. Возможно, я бы смоделировал возврат для входного параметра ExportPath? Просто вернуть путь строки, который был введен? Будет ли этого достаточно?

Функция 2

function Inspect-ServiceSnapshot {
[CmdletBinding()]
param (
    #Snapshot
    [Parameter(Mandatory=$false)]
    [ValidateScript({Test-Path $_ -PathType Leaf})]
    [string]$SnapshotPath,

    # timer
    [Parameter(Mandatory=$false)]
    [int]$TimeToWait = 0,

    # If variable
    [Parameter(Mandatory=$false)]
    [object[]]
    $SnapshotVariable,

    # compare variable
    [Parameter(Mandatory=$false)]
    [object[]]
    $CompareVariable
)
if($TimeToWait) { Start-Sleep -Seconds $TimeToWait }
if($SnapshotVariable){$snap = $SnapshotVariable}
if($SnapShotPath){$snap = Import-Csv -Path $SnapshotPath}
if($CompareVariable){$Compare = $CompareVariable}else{$Compare = (Get-Service)}
if($null -eq $CompareVariable -and $null -ne $SnapshotVariable){Write-Error -Message "If you have a SnapshotVariable, Compare variable is required" -ErrorAction Stop}
if($null -eq $SnapshotVariable -and $null -ne $CompareVariable){Write-Error -Message "If you have a CompareVariable, SnapshotVariable is required" -ErrorAction Stop}

$list = @()
foreach($entry in $Compare) {
# make sure we are dealing with the SAME service
    $previousStatus = $snap | Where-Object { $_.Name -eq $entry.Name} | Select-Object -Property Status -first 1 -ExpandProperty Status
    $info = New-Object -TypeName psobject -Property @{
        Name = $entry.Name
        CurrentStatus = $entry.status
        DisplayName = $entry.displayname
        StartType = $entry.StartType
        PreviousStatus = if ($null -ne $previousStatus) { $previousStatus } else { 'Didnt Exist before, New Service' }
        isDifferent = if($previousStatus -ne $entry.status) {$true} elseif($null -eq $previousStatus) {$null} else { $false}
    }
    $list += $info
}
$list | Where-Object { $_.isDifferent -eq $true -and $_.StartType -ne "Automatic"}
}

На этом, я думаю, я бы хотел проверить все 4 входа. Я также должен был бы смоделировать зависимости и некоторые входные данные, поскольку они требуют реальных объектов для фиктивных данных. Кроме этого. Нет подсказки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...