我想在我的PowerShell脚本中定义独立函数,并且能够在不执行脚本其余部分的情况下对这些函数进行Pester测试。有没有办法在不单独文件中定义这些函数的情况下实现这一点?
在下面的伪代码示例中,如何在不执行mainFunctionality的情况下测试functionA或functionB?
- 脚本. ps1:**
functionA
functionB
...
mainFunctionality
- 脚本.测试. ps1:**
BeforeAll {
. $PSScriptRoot/script.ps1 # This will execute the mainFunctionality, which is what I want to avoid
}
Describe 'functionA' {
# ... tests
}
我相信在Python中,你可以通过将你的"mainFunctionality" Package 在这个条件中来做到这一点,所以我正在Powershell中寻找类似的东西。
if __name__ == '__main__':
mainFunctionality
3条答案
按热度按时间kwvwclae1#
使用PowerShell Abstract Syntax Tree (AST)获取并调用
functionA
:ix0qys7i2#
你可以使用
$MyInvocation.PSCommandPath
来确定谁调用了你的脚本,这是我能想到的最接近Python的if __name__ == '__main__':
的。这个属性将给你调用者的绝对路径。从那里你可以提取脚本名,即使用Path.GetFileName
,然后你可以确定你想要做什么,例如,* * 如果呼叫方的名称等于main.ps1
,则调用mainFunctionality
;如果呼叫方的名称不等于script.Tests.ps1
,则调用mainFunctionality
**。下面是一个简短的例子。
然后,如果从
main.ps1
调用myScript.ps1
,您将看到:如果从其他地方调用
myScript.ps1
(控制台或其他名称不同的脚本),您将看到:tpxzln5u3#
可以,您可以使用Invoke-Expression cmdlet测试PowerShell脚本中的函数,而无需执行脚本。此cmdlet允许您像执行命令一样执行字符串。例如,如果您的脚本中有一个名为Test-Function的函数,则可以使用以下命令对其进行测试:
Invoke-Expression -Command "Test-Function"
可以,您可以在PowerShell脚本中测试函数,而无需执行脚本的其余部分。为此,您可以使用Invoke-Pester命令在脚本中运行特定测试。例如,如果要测试函数functionA和functionB,则可以使用以下命令:
调用纠缠脚本.\MyScript.ps1 -测试名称函数A、函数B
这将执行指定函数的测试,而不执行脚本的其余部分。