2017-01-17 3 views
1

클래스 기반 DSC 리소스를 테스트하는 장치에 문제가 있습니다. 클래스에서 몇 가지 함수를 모의하려고하는데 캐스팅 오류가 발생합니다. 이 방법Unit Pester로 클래스 기반 DSC 리소스 테스트

using module 'C:\Program Files\WindowsPowerShell\Modules\xVMWareVM\xVMWareVM.psm1' 

$resource = [xVMWareVM]::new() 

    Describe "Set" { 

    Context "If the VM does not exist" { 

     Mock xVMWareVM $resource.TestVMExists {return $false} 
     Mock xVMWareVM $resource.CreateVM 

     It "Calls Create VM once" { 
      Assert-MockCalled $resource.CreateVM -Times 1 
     } 
    } 
} 

사람이 알고 있나요 달성하기

PSInvalidCastException: Cannot convert the "bool TestVMExists(string vmPath,  
string vmName)" value of type "System.Management.Automation.PSMethod" to type 
"System.Management.Automation.ScriptBlock". 

내 테스트 코드는 무엇입니까?

미리 감사드립니다.

+0

어떻게 리소스가 어떻게 생겼는지는 모르지만 코드 주위에 'InModuleScope xVMWareVM {}'이 있습니까? – BartekB

답변

2

현재 Pester를 사용하여 클래스 기능을 모의 할 수 없습니다. 현재 해결 방법은 Add-Member -MemberType ScriptMethod을 사용하여 함수를 대체하는 것입니다. 이것은 당신이 모의 주장을하지 않을 것이라는 의미입니다.

나는 이것을 DockerDsc tests by @bgelens에 빌 렸습니다.

클래스 코드가 없지만이를 테스트하지 못했지만 위의 @bgelens 코드와 함께 아이디어를 얻을 수 있습니다.

using module 'C:\Program Files\WindowsPowerShell\Modules\xVMWareVM\xVMWareVM.psm1' 

    Describe "Set" { 

    Context "If the VM does not exist" { 
     $resource = [xVMWareVM]::new() 
     $global:CreateVmCalled = 0 
     $resource = $resource | 
      Add-Member -MemberType ScriptMethod -Name TestVMExists -Value { 
        return $false 
       } -Force -PassThru 
     $resource = $resource | 
      Add-Member -MemberType ScriptMethod -Name CreateVM -Value { 
        $global:CreateVmCalled ++ 
       } -Force -PassThru 

     It "Calls Create VM once" { 
      $global:CreateVmCalled | should be 1 
     } 
    } 
} 
+1

대단히 고마워,이 정확히 내가 원하는 않습니다 :) – Carl