1+ <#
2+ . SYNOPSIS
3+ network.psm1 模块的单元测试
4+
5+ . DESCRIPTION
6+ 使用Pester框架测试网络工具功能的各种场景
7+ #>
8+
9+ BeforeAll {
10+ # 导入被测试的模块
11+ Import-Module " $PSScriptRoot \..\modules\network.psm1" - Force
12+ }
13+
14+ Describe " Test-PortOccupation 函数测试" {
15+ Context " 端口占用检测" {
16+ It " 应该能够检测到已占用的端口" {
17+ # 测试一个通常被占用的端口(如果存在)
18+ # 这里使用一个动态方法来找到一个被占用的端口
19+ $occupiedPort = Get-NetTCPConnection | Where-Object { $_.State -eq " Listen" } | Select-Object - First 1 - ExpandProperty LocalPort
20+
21+ if ($occupiedPort ) {
22+ $result = Test-PortOccupation - Port $occupiedPort
23+ $result | Should - Be $true
24+ } else {
25+ # 如果没有找到被占用的端口,跳过此测试
26+ Set-ItResult - Skipped - Because " 没有找到被占用的端口进行测试"
27+ }
28+ }
29+
30+ It " 应该能够检测到未占用的端口" {
31+ # 使用一个不太可能被占用的高端口号
32+ $unusedPort = 65432
33+ $result = Test-PortOccupation - Port $unusedPort
34+ $result | Should - Be $false
35+ }
36+
37+ It " 应该正确处理无效端口号" {
38+ # 测试边界值
39+ { Test-PortOccupation - Port 0 } | Should -Not - Throw
40+ { Test-PortOccupation - Port 65535 } | Should -Not - Throw
41+ }
42+ }
43+ }
44+
45+ Describe " Get-PortProcess 函数测试" {
46+ Context " 进程信息获取" {
47+ It " 应该能够获取占用端口的进程信息" {
48+ # 找到一个被占用的端口
49+ $occupiedPort = Get-NetTCPConnection | Where-Object { $_.State -eq " Listen" } | Select-Object - First 1 - ExpandProperty LocalPort
50+
51+ if ($occupiedPort ) {
52+ $result = Get-PortProcess - Port $occupiedPort
53+ ($result ) | Should -Not - Be $null
54+ $result.Port | Should - Be $occupiedPort
55+ $result.ProcessId | Should - BeGreaterThan 0
56+ $result.ProcessName | Should -Not - BeNullOrEmpty
57+ } else {
58+ Set-ItResult - Skipped - Because " 没有找到被占用的端口进行测试"
59+ }
60+ }
61+
62+ It " 应该对未占用的端口返回null" {
63+ # 使用一个不太可能被占用的高端口号
64+ $unusedPort = 65431
65+ $result = Get-PortProcess - Port $unusedPort
66+ ($result ) | Should - Be $null
67+ }
68+
69+ It " 返回的对象应该包含所有必需的属性" {
70+ # 找到一个被占用的端口
71+ $occupiedPort = Get-NetTCPConnection | Where-Object { $_.State -eq " Listen" } | Select-Object - First 1 - ExpandProperty LocalPort
72+
73+ if ($occupiedPort ) {
74+ $result = Get-PortProcess - Port $occupiedPort
75+ if ($result ) {
76+ $result.PSObject.Properties.Name | Should - Contain " Port"
77+ $result.PSObject.Properties.Name | Should - Contain " ProcessId"
78+ $result.PSObject.Properties.Name | Should - Contain " ProcessName"
79+ $result.PSObject.Properties.Name | Should - Contain " Path"
80+ $result.PSObject.Properties.Name | Should - Contain " CommandLine"
81+ }
82+ } else {
83+ Set-ItResult - Skipped - Because " 没有找到被占用的端口进行测试"
84+ }
85+ }
86+ }
87+ }
88+
89+ Describe " Wait-ForURL 函数测试" {
90+ Context " URL 可达性测试" {
91+ It " 应该能够检测到可达的URL" {
92+ # 测试一个通常可达的URL(如果网络连接正常)
93+ $result = Wait-ForURL - DevToolsUrl " http://www.google.com" - Timeout 10 - Interval 1
94+ # 注意:这个测试可能因为网络环境而失败,所以我们不强制要求结果
95+ $result | Should - BeOfType [bool ]
96+ }
97+
98+ It " 应该对不可达的URL返回false" {
99+ # 使用一个不存在的本地地址
100+ $result = Wait-ForURL - DevToolsUrl " http://localhost:99999" - Timeout 5 - Interval 1
101+ $result | Should - Be $false
102+ }
103+
104+ It " 应该正确处理超时" {
105+ # 测试超时功能
106+ $startTime = Get-Date
107+ $result = Wait-ForURL - DevToolsUrl " http://localhost:99998" - Timeout 3 - Interval 1
108+ $endTime = Get-Date
109+ $elapsed = ($endTime - $startTime ).TotalSeconds
110+
111+ $result | Should - Be $false
112+ $elapsed | Should - BeGreaterOrEqual 3
113+ $elapsed | Should - BeLessThan 5 # 允许一些误差
114+ }
115+
116+ It " 应该使用默认参数" {
117+ # 测试默认参数
118+ { Wait-ForURL - Timeout 1 } | Should -Not - Throw
119+ }
120+ }
121+ }
0 commit comments