1

我正在尝试测试Set-PropertyValue设置 SharePoint 列表项的属性值的 PowerShell 命令 ( )。函数使用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 列表进行了更改
  • 可能将列表项置于不良状态
  • 测试没有结构化以轻松测试多个属性,也许是在一个循环中

有没有更好的方法来测试这个?

4

1 回答 1

0

一种方法:

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