是否可以在Powershell中编写NUnit测试?

时间:2018-04-19 17:30:54

标签: unit-testing powershell nunit

我想在Powershell中编写一个NUnit测试。

在C#中考虑以下NUnit测试:

[TestCase(0)]
[TestCase(1)]
public void YabaDabaDoo(int x)
{
    Assert.IsTrue(x > -1);
}

我希望能够在Powershell中表达相同的意图。显然,魔鬼是详细的,但是当需要用某种脚本语言编写测试时,有一些有效的场景。

现在,也许NUnit不是正确的选择,在这种情况下是什么?最好与NUnit相提并论。

2 个答案:

答案 0 :(得分:3)

  

我想在Powershell中编写一个NUnit测试。

没有。不同的技术。

Powershell有Pester来测试Powershell脚本,而NUnit用于测试托管代码。

Pester功能包括测试运行器,断言,模拟等。

wiki guide了解有关Pester的更多信息,以获取更多详情。

Powershell脚本可用于运行NUnit测试运行器和扩展测试。

例如

$ProjectDir = "."
$PackagesDir = "$ProjectDir\packages"
$OutDir = "$ProjectDir\bin\Debug"

# Install NUnit Test Runner
$nuget = "$ProjectDir\.nuget\nuget.exe"
& $nuget install NUnit.Runners  -Version 2.6.2 -o $PackagesDir

# Set nunit path test runner
$nunit = "$ProjectDir\packages\NUnit.Runners.2.6.2\tools\nunit-console.exe"

#Find tests in OutDir
$tests = (Get-ChildItem $OutDir -Recurse -Include *Tests.dll)

# Run tests
& $nunit /noshadow /framework:"net-4.0" /xml:"$OutDir\Tests.nunit.xml" $tests

答案 1 :(得分:2)

NUnit就像其他人提到的托管代码一样。我建议使用Pester - 模块进行单元测试PowerShell代码。它可以在GitHub上使用,也可以在Windows 10中默认使用。例如:

Describe "YabaDabaDoo" {
    $cases = @{x=-1},@{x=0},@{x=1}

    It "<x> should be greater than -1" -TestCases $cases {
        param ([int]$x)
        $x | Should -BeGreaterThan -ExpectedValue -1
    }    
}

输出:

Describing YabaDabaDoo
  [-] -1 should be greater than -1 113ms
    Expected '-1' to be greater than the actual value, but got -1.
    6:         $x | Should -BeGreaterThan -ExpectedValue -1
  [+] 0 should be greater than -1 30ms
  [+] 1 should be greater than -1 15ms