我想定义独立的我的 PowerShell 脚本中的函数,并且能够在不执行脚本其余部分的情况下对函数进行 Pester 测试。有什么办法可以做到这一点而不需要在单独的文件中定义函数吗?
在下面的伪代码示例中,如何在不执行 main 功能的情况下测试函数或功能?
脚本.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”包装在这个条件中来做到这一点,所以我正在Powershell中寻找类似的东西。
if __name__ == '__main__':
mainFunctionality
Ref: if __name__ == "__main__": 会做什么? https://stackoverflow.com/questions/419163/what-does-if-name-main-do
你可以使用$MyInvocation.PSCommandPath https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.invocationinfo.pscommandpath?view=powershellsdk-1.1.0#system-management-automation-invocationinfo-pscommandpath为了确定谁调用了你的脚本,这是我能想到的最接近Python的if __name__ == '__main__':
.
此属性将为您提供调用者的绝对路径,从那里您可以提取脚本的名称,即Path.GetFileName https://learn.microsoft.com/en-us/dotnet/api/system.io.path.getfilename?view=net-7.0在你确定你想做什么之后,例如,call mainFunctionality
如果调用者的名字等于main.ps1
或致电mainFunctionality
如果调用者的名字不等于script.Tests.ps1
等等。下面是简短的演示。
function A {
"I'm function A"
}
function B {
"I'm function B"
}
function mainFunctionality {
"I'm function mainFunctionality"
}
A # Calls A
B # Calls B
# Call `mainFunctionality` only if my caller's name is `main.ps1`
if([System.IO.Path]::GetFileName($MyInvocation.PSCommandPath) -eq 'main.ps1') {
mainFunctionality
}
那么如果调用myScript.ps1
from main.ps1
你会看到:
I'm function A
I'm function B
I'm function mainFunctionality
如果打电话myScript.ps1
从其他任何地方(控制台或其他具有不同名称的脚本)您会看到:
I'm function A
I'm function B
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)