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

如何在Golang中测试io.writer?

锺离珂
2023-03-14
问题内容

最近,我希望为golang编写单元测试。功能如下。

func (s *containerStats) Display(w io.Writer) error {
    fmt.Fprintf(w, "%s %s\n", "hello", "world")
    return nil
}

那么,如何测试“ func Display”的结果是“ hello world”呢?


问题答案:

您只需输入自己的值,io.Writer然后测试写入其中的内容是否符合您的期望。bytes.Buffer这样做是一个不错的选择,io.Writer因为它只是将输出存储在其缓冲区中。

func TestDisplay(t *testing.T) {
    s := newContainerStats() // Replace this the appropriate constructor
    var b bytes.Buffer
    if err := s.Display(&b); err != nil {
        t.Fatalf("s.Display() gave error: %s", err)
    }
    got := b.String()
    want := "hello world\n"
    if got != want {
        t.Errorf("s.Display() = %q, want %q", got, want)
    }
}


 类似资料:
  • 问题内容: 将参数传递给已编译的代码: 结果是: 显示已通过的用户名。 目的: 为了防止每次测试代码时都需要手动构建和运行代码,目的是编写一个能够测试参数传递的测试。 尝试 运行以下测试: 结果是: 问题 它看起来像那样不能够这个参数传递给函数的结果是不是 问题答案: 根据我的评论,第一个值是可执行文件本身的(路径),因此应解决您的问题。您可以从标准包中查看标志测试,他们正在做类似的事情。 另外,

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

  • 问题内容: 我正在使用Gorilla mux和net / http包来创建一些路由,如下所示 我正在尝试编写测试以测试这些路线。例如,我正在尝试测试路由,特别是试图返回的路由,因此我有以下测试代码。 但是,当我运行此测试时,可以想象得到是因为请求未正确路由。 当我从浏览器测试此GET路由时,它确实返回,因此我确定测试的设置方式存在问题。 问题答案: 在这里使用init()是可疑的。它仅在程序初始化

  • 问题内容: 运行时,输出: 但是,当我再次运行后,所有测试都通过了。 仅当我重置mysql数据库然后首次运行时,测试才会失败。 对于每个请求,我都会做一个请求,以确保在数据库中创建了数据。 谁能帮助我确保测试按顺序运行?那是请求在请求之前运行? 问题答案: 您不能/不应该依赖测试执行顺序。没有定义测试的执行顺序,并且使用测试标志可以排除测试的运行,因此您无法保证它们将完全运行。 例如,以下命令将仅

  • 问题内容: 我正在使用Go开发Web应用程序。到目前为止一切顺利,但是现在我将Wercker集成为CI工具,并开始关心测试。但是我的应用程序严重依赖于Cobra / Viper配置/标志/ environment_variables方案,而且我不知道如何在运行测试套件之前正确初始化Viper值。任何帮助将非常感激。 问题答案: 当我使用Cobra / Viper或任何其他CLI帮助程序组合时,我的

  • 我试图用Jasmine为Angularjs编写单元测试。这是我的控制器: 和测试 测试失败,即使我试图测试期望(true). toBe(true); 茉莉花,因果报应,棱角分明的嘲弄都在我的索引里。jasmine调试页面中的html,还有测试脚本。 我发现如果删除beforeach()块,expect(true)。托比(真的)通过了。 下面是一个错误: