如何使用Pester测试框架编写小型测试函数?
Pester 测试 SaveStudent 函数实现方案
前置条件
- 已安装Pester测试框架,可执行
Install-Module Pester -Force -SkipPublisherCheck完成安装 - 待测试的
SaveStudent函数已保存为独立的.ps1脚本,比如命名为StudentFunc.ps1
测试实现步骤
- 新建测试脚本,命名必须符合
*.Tests.ps1规范,比如StudentFunc.Tests.ps1,Pester会自动识别该格式文件为测试脚本 - 在测试脚本开头导入待测试的函数,编写测试用例覆盖
SaveStudent的两个核心行为:返回值与输入一致、输出日志包含对应学生邮箱 - 完整测试代码示例:
BeforeAll { # 导入同目录下的待测试函数脚本 . $PSScriptRoot/StudentFunc.ps1 } Describe "SaveStudent 功能测试" { It "正常入参下返回的学生对象与输入完全一致" { # 构造测试用例数据 $inputStudent = [PSCustomObject]@{ Name = "测试用户" Email = "test@demo.com" Id = "2024001" } $output = SaveStudent -Student $inputStudent # 断言返回值符合预期 $output | Should -Be $inputStudent } It "正常入参下输出包含学生邮箱的日志" { $testMail = "zhangsan@school.com" $inputStudent = [PSCustomObject]@{ Email = $testMail } # 捕获Write-Host输出(Pester 5+支持直接捕获Information流) $log = SaveStudent -Student $inputStudent 6>&1 # 断言日志内容正确 $log | Should -Be "save student email for $testMail" } }
- 执行测试,在PowerShell终端运行命令
Invoke-Pester -Path ./StudentFunc.Tests.ps1即可看到测试结果
注意事项
- 如果你使用的是Pester 4及更早版本,无法直接捕获Write-Host输出,需要用Mock方式验证调用,示例如下:
# Pester 4 版本的日志验证写法 Mock Write-Host {} -ParameterFilter { $Message -eq "save student email for $testMail" } SaveStudent -Student $inputStudent Should -Invoke Write-Host -Exactly 1 -Scope It
- 可根据业务需求补充边界测试用例,比如入参Student为null、Student.Email为空的场景,验证函数的容错行为是否符合预期
- 不要在不同的It测试块之间共享变量,保证每个测试用例的独立性,避免测试结果互相干扰
- 如果函数后续扩展了持久化逻辑(比如写入数据库、文件),需要用Mock屏蔽外部依赖,只测试函数本身的逻辑
内容的提问来源于stack exchange,提问作者kitten
相关产品推荐
相关产品推荐

