当前位置: 首页 > 面试题库 >

如何在Golang中测试参数的传递?

胡光霁
2023-03-14
问题内容
package main

import (
    "flag"
    "fmt"
)

func main() {
    passArguments()
}

func passArguments() string {
    username := flag.String("user", "root", "Username for this server")
    flag.Parse()
    fmt.Printf("Your username is %q.", *username)

    usernameToString := *username
    return usernameToString
}

将参数传递给已编译的代码:

./args -user=bla

结果是:

Your username is "bla"

显示已通过的用户名。

目的: 为了防止每次测试代码时都需要手动构建和运行代码,目的是编写一个能够测试参数传递的测试。

尝试

运行以下测试:

package main

import (
    "os"
    "testing"
)

func TestArgs(t *testing.T) {
    expected := "bla"
    os.Args = []string{"-user=bla"}

    actual := passArguments()

    if actual != expected {
        t.Errorf("Test failed, expected: '%s', got:  '%s'", expected, actual)
    }
}

结果是:

Your username is "root".Your username is "root".--- FAIL: TestArgs (0.00s)
    args_test.go:15: Test failed, expected: 'bla', got:  'root'
FAIL
coverage: 87.5% of statements
FAIL    tool    0.008s

问题

它看起来像那样os.Args = []string{"-user=bla不能够这个参数传递给函数的结果是root不是bla


问题答案:

根据我的评论,第一个值os.Args是可执行文件本身的(路径),因此os.Args = []string{"cmd", "-user=bla"}应解决您的问题。您可以从标准包中查看标志测试,他们正在做类似的事情。

另外,就像os.Args“全局变量”一样,最好保持测试之前的状态并在测试之后恢复状态。与链接测试类似:

oldArgs := os.Args
defer func() { os.Args = oldArgs }()

例如,在其他测试正在检查调用时传递的真实参数时,这可能会很有用go test



 类似资料:
  • 问题内容: 最近,我希望为golang编写单元测试。功能如下。 那么,如何测试“ func Display”的结果是“ hello world”呢? 问题答案: 您只需输入自己的值,然后测试写入其中的内容是否符合您的期望。这样做是一个不错的选择,因为它只是将输出存储在其缓冲区中。

  • 问题内容: 在JUnit4中,您可以通过在一种方法中提供参数集合来编写参数化的单元测试,这些参数将被传递给测试的构造函数,并通过另一种方法进行测试。如果我有一个预期引发异常的参数,该如何指定? 问题答案:

  • 问题内容: 我有一个像这样的表驱动测试用例: 我可以检查长度是否相同,并编写一个循环来检查每个键值对是否相同。但是,当我想将其用于另一种类型的地图(例如)时,必须再次编写此检查。 我最终要做的是,将地图转换为字符串并比较了字符串: 假定等效映射的字符串表示形式相同,在这种情况下,这似乎是正确的(如果键相同,则它们会散列为相同的值,因此它们的顺序将相同)。有一个更好的方法吗?在表驱动测试中比较两个映

  • 注意:我已经做了一个搜索和阅读了各种博客,但找不到一个例子,与我正在尝试做什么。 它似乎不喜欢我的某个测试成员字段是私有的,但没有告诉我它对哪个字段有问题。我见过的单元测试的所有例子,唯一公开的一定是ExpectedException规则。

  • 本文向大家介绍如何在PowerShell函数中传递参数?,包括了如何在PowerShell函数中传递参数?的使用技巧和注意事项,需要的朋友参考一下 您可以在PowerShell函数中传递参数,并且要捕获这些参数,需要使用参数。通常,当您在函数外部使用变量时,您实际上不需要传递参数,因为变量本身是Public,可以在函数内部访问。但是在某些情况下,我们需要将参数传递给函数,下面的示例说明了如何编写该

  • 问题内容: 我已经按照此链接中所述的教程进行操作。在下面的代码中,由于某种原因,数据不会作为参数附加到url上,但是如果我使用它直接将其设置为url 则可以。 问题答案: 对于简单的情况,我建议您使用jQuery 的或语法: 如果您需要捕获失败案例,请执行以下操作: 此外,如果您始终发送JSON字符串,则可以在最后使用$ .getJSON 或$ .post以及另一个参数。