unit-testing - 如何防止 Pester Mocked Read-Host 在代码覆盖期间提示输入

标签 unit-testing powershell mocking code-coverage pester

我有一个 Pester 测试,我在其中为我的函数模拟了一个 Read-Host 调用,它遵循这里问题中的格式:

How do I mock Read-Host in a Pester test?

Describe "Test-Foo" {
    Context "When something" {
    Mock Read-Host {return "c:\example"}

        $result = Test-Foo

        It "Returns correct result" { # should work
            $result | Should Be "c:\example"
        }
         It "Returns correct result" { # should not work
            $result | Should Be "SomeThingWrong"
        }
    }
}

当使用这种格式并直接调用测试时,我的测试运行完美。但是,当我使用 Invoke-Pester "MyTestFile"-CodeCoverage "MyFileUnderTest"运行包含我的测试的文件时,系统提示我为我的测试输入一个读取主机值。

我的意图是测试将自动运行,而无需输入 Read-Host 值。这将在直接调用测试(当前有效)和使用 CodeCoverage 命令调用我的测试文件时发生。

有谁知道实现这个的方法吗?

编辑:

对于我收到的第一条评论,我已经查看了 Pester 的文档,包括此链接 https://github.com/pester/Pester/wiki/Unit-Testing-within-Modules .但是,我还没有从 Pester 看到任何关于使用 Read-Host 的官方文档,并使用了我在问题顶部的 StackOverflow 链接中找到的解决方案。

模块 Test-Foo 函数的源代码:

function Test-Foo
{
    return (Read-Host "Enter value->");
}

最佳答案

给定您的用例:Module Test-Foo 函数

function Test-Foo {
    return (Read-Host -Prompt 'Enter value->')
}

我建议您改为模拟 Test-Foo 函数:

Context 'MyModule' {
    Mock -ModuleName MyModule Test-Foo { return 'C:\example' }

    It 'gets user input' {
        Test-Foo | Should -Be 'C:\example'
    }
}

关于unit-testing - 如何防止 Pester Mocked Read-Host 在代码覆盖期间提示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297499/

相关文章:

python - 模拟文件中导入的类的 __init__

java - 模拟是单元测试的重要组成部分吗?

json - Powershell - 创建一个json文件

c# - ServiceStack 单元测试 - serviceStack 响应对象未初始化

powershell - VBscript或Powershell脚本通过快捷方式/链接删除超过x天数的文件

powershell - 我可以在 UNC 路径上使用 New-Symlink 吗?

unit-testing - 从测试覆盖中排除代码

mocking - PowerMock 静态类不模拟

android - 如何告诉被测对象使用模拟而不是它自己的变量

c# - Visual Studio : Test ClassCleanup Timeout When Executing A Batch File