有没有办法在不执行脚本的情况下测试 PowerShell 脚本中的函数?

2024-02-28

我想定义独立的我的 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等等。下面是简短的演示。

  • myScript.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(使用前将#替换为@)

有没有办法在不执行脚本的情况下测试 PowerShell 脚本中的函数? 的相关文章

随机推荐

  • 如果存在则不能批量工作

    我正在尝试创建一个 bat 文件来创建一个简单的文本文件 我的问题是 Windows XP 主文件夹是C Documents and Settings而 vista 及以上C Users 我正在运行这个 无论我为路径名输入什么 我总是得到i
  • Express 中跨子域的会话

    我正在使用 Express 中的 vhost 功能和 Node 来管理我的应用程序的多个子域 该应用程序使用相同的会话密钥和密钥 并且我相信我已经使用了正确的会话 cookie 设置 cookie path domain example c
  • 如何在 Azure AD B2C 中存储来自 IdentityServer 3 的声明或仅将其包含在 AAD B2C 颁发的令牌中

    我想知道是否可以将 oid 声明或基本上由 Identity Server 3 发出的任何其他声明传播到 AAD B2C 并使其成为 Azure AD B2C 发出的令牌的一部分 我们需要在客户端拥有一个原始 ID 而我们从 sub 和 o
  • 没有框架的javascript ajax请求

    有谁知道如何在不使用 jQuery 等 javascript 框架的情况下制作跨浏览器的 ajax 请求功能 The XMLHttpRequest对象实际上使用起来并不那么复杂 为了广泛兼容 您必须玩一些游戏来创建对象 但之后的简单操作就相
  • 如何在浏览器窗口调整大小时调整CSS中的梯形大小

    当我调整浏览器窗口大小时 我试图调整梯形形状的大小 我试图通过使用来做到这一点box resize但还是没用 是否可以通过使用定义 创建的梯形来做到这一点border黑客 还有什么其他方法可以使梯形能够在调整浏览器窗口大小时调整大小 div
  • Codeigniter - 提交后验证失败时重新填充表单

    我有一个表单 要求用户输入一些信息 如果他们未能填写必填字段 他们将被重新提交表格 页面顶部通知他们需要哪些字段 并且我启用了粘性表单 set value 这样他们的输入就不会丢失 我使用 flashdata 向用户显示消息 即 如果他们输
  • 从 listWidget 中删除选定的项目

    如何从列表中删除选定的项目QListWidget 我尝试编写以下代码 但它不起作用 QList
  • 使用 Moya 获取响应标头

    我在我的 swift 应用程序中使用 Moya 来处理网络请求 我能够使用 Moya Object Mapper 获取请求并映射结果 我之前使用过 alamofire 熟悉如何发布 获取请求和读取响应头 然而 我似乎不明白如何在 Moya
  • Ag-grid 捆绑包尺寸太大

    我正在使用 Angular 6 开发一个 Web 应用程序 我有一个 Ag grid 企业版 Ag grid 文档说 我们必须导入所有农业网格角 农业网格社区 and 农业电网企业与农网企业合作 编译后 主包总大小超过 1 5 MB 在那里
  • Firebase 函数问题以及 .add() 与 .doc().set() 之间的区别

    几周以来我遇到了以下问题 以前不是问题 1 添加 数据 const saveNewDoc functions https onCall data NewDocWrite context CallableContext gt return a
  • 两个类之间的递归java泛型

    这是一个类似于中提出的问题两个类之间可能递归的 Java 泛型 https stackoverflow com questions 5929689 possibly recursive java generics between two c
  • 从派生类初始化列表调用基类构造函数的顺序

    struct B int b1 b2 B int int struct D B int d1 d2 which is technically better D int i int j int k int l B i j d1 k d2 l
  • AttributeError:“模块”对象没有属性“get_frontal_face_ detector”

    我试图使用 python 的 dlib 库来检测面部标志 我正在使用上面给出的例子人脸检测器 http dlib net face landmark detection py html 我在安装dlib之前已经安装了所有依赖项 首先 我使用
  • Joomla 2.5创建组件并保存数据

    我一直在使用这个文档 我在网上可以找到的唯一文档 来构建一个组件 http docs joomla org Developing a Model View Controller Component 2 5 Introduction http
  • 为什么 awk 似乎随机化数组?

    如果你看一下这个的输出awk测试一下 你会看到array in awk似乎是按某种随机图案打印的 对于相同数量的输入 它似乎具有相同的顺序 为什么会这样呢 echo one two three four five six awk for i
  • Windows 服务中线程内的计时器

    我不知道如何以最佳方式解决这个问题 现在我有一个 Windows 服务 其唯一任务是从具有特定 DSN 的数据库收集数据 然后在数据有效时发送电子邮件 该服务包含一个计时器 每 5 分钟滴答一次并执行上述任务 现在我需要重新编写Window
  • 如何在 d3 javascript 中为 SVG 文本元素分配唯一 id

    在 d3 中制作条形图 我有 30 多个条形图 x 轴上有 30 多个相应标签 我希望在页面加载时隐藏 x 轴标签 这是有效的 并且仅当用户将光标悬停在相应的栏 svg 矩形对象 上时才出现 为此 我为每个矩形和每个文本元素分配一个 id
  • 使用最小起订量的扩展方法的单元测试

    我正在为 azuresearch 的函数 uploaddocuments 编写单元测试 Unsupported expression gt Index It IsAny
  • 在 Perl 中获取堆栈跟踪? [复制]

    这个问题在这里已经有答案了 如何在 Perl 中获取堆栈跟踪 对于调试需要 我喜欢鲤鱼 永远 http search cpan org dist Carp Always perl MCarp Always my script pl
  • 有没有办法在不执行脚本的情况下测试 PowerShell 脚本中的函数?

    我想定义独立的我的 PowerShell 脚本中的函数 并且能够在不执行脚本其余部分的情况下对函数进行 Pester 测试 有什么办法可以做到这一点而不需要在单独的文件中定义函数吗 在下面的伪代码示例中 如何在不执行 main 功能的情况下