2017-06-06 51 views
1

我正在使用Pester为Powershell应用程序编写测试。

我已经能够为大多数函数创建模拟,但一直没有能够模拟返回$的函数吗?变量。我目前正在使用它来评估AWS CLI命令的回报。

这例如用于模拟失败的AWS CLI命令返回。

有什么想法?

+0

$ _通常只是您正在使用的当前项目。你能举出一些你试图嘲笑的例子吗? –

+3

@BenRichards'$?'返回'true/false',具体取决于最后一条命令是否运行正常。 – ConnorLSW

+0

$?是只读变量的权利?你怎么嘲笑它? – Ramana

回答

1

谢谢,我发现你的答案很有用,可以与我的团队分享,并找到我们自己的解决方案,我们需要的解决方案。这比预期更明显,只是一点结构。

我们创建了一个辅助函数并通过了$?值为

function Test-LastExitCodeIsFalse ($last_exit) { 
    if ($last_exit) { 
     return $false 
    } 
    $true 

以及使用被

aws s3 <an aws command> 
if (Test-LastExitCodeIsFalse($?)) { 
    throw "AWS Exception" 
} 

使用纠缠,那么我们就嘲笑试验LastExitCodeIsFalse函数返回。我们有一个失败aws的单元测试:)

希望这会有所帮助。

0

你应该能够做到:

Mock AWC-CLI { $ = $true } -Verifiable 
2

如果你希望得到执行相同的功能$?模拟代码 - 您可以使用这样的事情(在如何实际条件相当有限返回如果多条线路同时等执行,将有可能需要根据执行上下文)

Function Test-LastCommandError { 
    $LastCommand = (History | Select -Last 1).CommandLine 
    $LastError = $Error[-1].InvocationInfo.Line 
    $LastCommand -eq $LastError 
} 

1/1#Success 
Test-LastCommandError #returns false 

1/0#Error 
Test-LastCommandError #returns true 

这对我的作品手动执行的每一行进行修改,而不是在一个特设的ISE窗口(因为它在执行时将所有内容复制粘贴为一个命令)

相关问题