[玩转系统] 加速 Pester 测试开发
作者:精品下载站 日期:2024-12-14 08:05:19 浏览:14 分类:玩电脑
加速 Pester 测试开发
前几天,我分享了我的 2022 年 PowerShell 计划。不用说,我迫不及待地想深入研究。我正在开发一个新模块,由于它要到下个月才会发布,所以我继续并标记了它仅作为核心。我还开始为其编写一组 Pester 5.x 测试。当然,这迫使我重新访问 Pester 文档并重新学习如何构建 Pester 测试。
在这个过程中,我决定需要帮助自己加快测试编写阶段。我有一组标准的测试,我喜欢将其用于模块中的函数。但复制和粘贴代码片段是很乏味的。我知道我可以创建一组 VS Code 片段,但这感觉有限制,我必须确保这些片段在我可能运行 VS Code 的所有系统上可用。相反,我编写了一个 PowerShell 函数来加速开发 Pester 5.x 测试。
我的函数采用一个模块并提取所有公共导出函数。对于每个函数,它都会创建一组标准 Pester 断言。这些是我总是想为每个函数运行的基线或样板测试。每个函数都包装在一个Describe 块中。不过,我可以选择 Context 块。该命令还将插入标签。请注意,我的标签插入代码依赖于 PowerShell 7 中的三元运算符。
$($tags ? "-tag $($tags -join ',')" : $null)
如果你想在Windows PowerShell中使用我的函数,你需要修改它。
该函数将字符串写入管道。
我可以运行 New-PesterBlock 并通过管道传输到 Out-File 或 Set-Clipboard。
这是带有该函数的脚本文件。
#requires -version 7.1
Function New-PesterBlock {
<#
.SYNOPSIS
Create a Pester 5.x test block
.DESCRIPTION
Create a Pester test block for exported functions from a given module.
The default output is a Describe block for each function but you can
create a Context block as an alternative.
The default behavior is to add a 'Function' tag to each block. You
can specify your own comma separated list of tags. Or use a parameter
value of $Null to not insert any tags.
The output is written for Pester 5.x.
.EXAMPLE
PS C:\> New-PesterBlock psteachingtools
Describe Get-Vegetable {
It "Should have help documentation" {
(Get-Help Get-Vegetable).Description | Should -Not -BeNullOrEmpty
}
It "Should have a defined output type" {
(Get-Command -CommandType function -name Get-Vegetable).OutputType | Should -not -BeNullOrEmpty
}
It "Should run without error" {
#mock and set mandator parameters as needed
{Get-Vegetable} | Should -Not -Throw
} -pending
} -tag function
Describe New-Vegetable {
It "Should have help documentation" {
(Get-Help New-Vegetable).Description | Should -Not -BeNullOrEmpty
}
It "Should have a defined output type" {
(Get-Command -CommandType function -name New-Vegetable).OutputType | Should -not -BeNullOrEmpty
}
It "Should run without error" {
#mock and set mandator parameters as needed
{New-Vegetable} | Should -Not -Throw
} -pending
} -tag function
...
Create a Describe block for each function in the PSTeachingTools module.
. EXAMPLE
PS C:\> New-Pesterblock psteachingtools -BlockType Context | Set-Clipboard
Create a context block for each function and copy the output to the Windows clipboard.
.INPUTS
None
.OUTPUTS
[System.String]
#>
[cmdletbinding()]
[alias("npb")]
[OutputType([System.String])]
Param(
[Parameter(Position = 0, Mandatory,HelpMessage = "The name of a PowerShell module.")]
[ValidateNotNullOrEmpty()]
[string]$ModuleName,
[Parameter(Position = 1,HelpMessage = "What kind of Pester test block do you want to create?")]
[ValidateSet("Describe", "Context")]
[string]$BlockType = "Describe",
[Parameter(HelpMessage = "Specify tags separated by commas. Use `$null to not insert any tags.")]
[string[]]$Tag = "function"
)
Begin {
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN ] Starting $($myinvocation.mycommand)"
#Put blocktype in proper case to make it pretty
$BlockType = [System.Globalization.CultureInfo]::CurrentUICulture.TextInfo.ToTitleCase($BlockType)
$Tags = $tag -join ","
} #begin
Process {
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Getting commands from $ModuleName"
Try {
$cmds = Get-Command -Module $ModuleName -CommandType Function -ErrorAction Stop
}
Catch {
Throw $_
}
if ($cmds) {
Foreach ($cmd in $cmds) {
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Defining tests for $($cmd.name)"
@"
$BlockType $($cmd.name) {
It "Should have help documentation" {
(Get-Help $($cmd.name)).Description | Should -Not -BeNullOrEmpty
}
It "Should have a defined output type" {
(Get-Command -CommandType function -name $($cmd.name)).OutputType | Should -Not -BeNullOrEmpty
}
It "Should run without error" {
<#
mock and set mandatory parameters as needed
this test is marked as pending since it
most likely needs to be refined
#>
{$($cmd.name)} | Should -Not -Throw
} -pending
#insert additional command-specific tests
} $($tags ? "-tag $($tags -join ',')" : $null)
"@
} #foreach cmd
} #if cmds
else {
Write-Warning "No functions found in the module $Modulename or the module itself doesn't exist."
}
} #process
End {
Write-Verbose "[$((Get-Date).TimeofDay) END ] Ending $($myinvocation.mycommand)"
} #end
} #close New-PesterBlock
该函数为每个测试块创建一个此处字符串。这些是我的默认断言。您可能想要编辑该函数的版本。我可能会将此命令集成到 VS Code 任务中。我希望你能让我知道你最终如何使用它。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag