使用Pester

时间:2015-06-25 20:48:24

标签: powershell sharepoint powershell-v3.0 pester

我尝试测试设置SharePoint列表项的属性值的PowerShell命令(Set-PropertyValue)。该函数使用Invoke-WebMethod函数对实际工作做。

我当前的Set-PropertyValue.Test.ps1档案:

# include stuff omitted

Describe 'Set-PropertyValue' {

  #
  # arrange
  #

  # set $url, $list, $id, $property variables
  ...

  # the value that it should be 
  $expected=10.5

  BeforeEach {
    # get the property's current value
    $original = Get-PropertyValue $url $list $id $property
  }

  AfterEach {
    # restore original value
    Set-PropertyValue $url $list $id $property $original
  }

  It "Should set a property's value" {

    #
    # act
    #

    # update property's value
    $response = Set-PropertyValue $url $list $id $property $expected

    # get the new value
    $actual = Get-PropertyValue $url $list $id $property

    #
    # assert
    #

    $response.statuscode | should be 204 # no content
    $actual | Should Be $expected

  } # It

} # Describe

我不喜欢这个原因有很多:

  • 外部依赖Get-PropertyValue
  • 没有测试隔离;对SharePoint列表进行了更改
  • 可能处于不良状态的级别列表项的潜力
  • 测试没有结构化,可以轻松地测试多个属性,或许是

有更好的方法来测试吗?

1 个答案:

答案 0 :(得分:0)

一种方法:

  • 将所有命令脚本放在子目录中(例如Functions
  • 创建模块文件(例如PsFoo.psm1); '点源'每个命令的脚本文件(例如Functions\Invoke-Foo.ps1),但不包括单元测试文件(例如Functions\Invoke-Foo.Tests.ps1)。
  • 创建一个模块测试文件(例如PsFoo.Tests.ps1),其中包含点源'模块文件并包含所有集成测试。
  • 将执行多个命令的所有单元测试(如我的问题'示例)重构为集成测试
  • PS> Invoke-Pester将运行集成测试(在PsFoo.Tests.ps1中)和单元测试(在Functions\*.Tests.ps1中)。