Я понимаю теории, но мне нужна небольшая помощь на практике, когда дело доходит до тестирования.
Так что я все еще нахожусь в процессе обучения тестированию в целом, и после некоторого исследования я могу видеть, что покрытие кода генерируется тем, сколько тестируется каждая строка кода. Я также изучаю 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 входа. Я также должен был бы смоделировать зависимости и некоторые входные данные, поскольку они требуют реальных объектов для фиктивных данных. Кроме этого. Нет подсказки.