Skip to content

Instantly share code, notes, and snippets.

@1RedOne
Created August 14, 2020 18:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1RedOne/4f60a5739c40a7541006cce153fc4194 to your computer and use it in GitHub Desktop.
Save 1RedOne/4f60a5739c40a7541006cce153fc4194 to your computer and use it in GitHub Desktop.
PowerShell Function to handle Moq Setup and Verifies for you!
<#
.Synopsis
Creates your Moq.Setups for you!
.DESCRIPTION
Provide a method signature to receive an example of a basic, lazy Mock for the method
.EXAMPLE
$myMethodSignature = "
GetDeploymentStatus(
string someToken,
int someIntValue = 10,
bool someBoolValue = false,
TimeSpan delayLookup = default,
CancellationToken cancellationToken
)"
New-MoqMethodConfiguration $myMethodSignature
.Setup(m=>m.
GetDeploymentStatus(It.IsAny<string>(),It.IsAny<int>(),It.IsAny<bool>(),It.IsAny<TimeSpan>(),It.IsAny<CancellationToken>())).Returns...
.EXAMPLE
Another example of how to use this cmdlet
#>
Function New-MoqMethodConfiguration{
[CmdletBinding()]
param(
[String]
$methodSignature,
[Switch]
$Verify = $false
)
$outputs = New-Object System.Collections.ArrayList
$methodName = $methodSignature.Split('(')[0]
Write-Verbose "found method of name $methodName"
$parms= $methodSignature.Split('(')[1..10].Split("`n").Trim().Replace(')','')
Write-Verbose "found $($parms.Count) parameters"
ForEach($parm in $parms){
if($parm.Length -le 0){continue}
Write-Verbose "processing $parm "
$outputs.Add("It.IsAny<$($parm.Split()[0])>()") | Out-Null
}
$paramMatcher = $outputs -join ","
if ($Verify){
Write-output ".Verify(m=>m.$($methodName)($paramMatcher), Times.Once)"
}
else{
Write-output ".Setup(m=>m.$($methodName)($paramMatcher)).Returns..."
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment