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

去:测试不能通过?

金宣
2023-03-14
问题内容

我在通过此测试时遇到问题。问题是,Write()我的结构体中的方法需要写入属性,但io.Writer接口不接受指针作为其接收者。

filelogger.go:

package logger

import (
    "io"
)

type FileLogger struct{
    File io.Writer
}

func NewFileLogger(file io.Writer) *FileLogger{
    return &FileLogger{file}
}

func (this *FileLogger) Log(message string) error {
    _, err := this.File.Write([]byte(appendNewLine(message)))

    return err
}

filelogger_test.go:

package logger

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

type WriterMock struct{
    data []byte
}

func (this WriterMock) Write(b []byte) (n int, err error) {
    this.data = append(this.data, b ...)

    return len(this.data), nil
}

func NewMockedFileLogger() *FileLogger{
    writer := WriterMock{}

    fileLogger := FileLogger{writer}

    return &fileLogger
}

func TestLog(t *testing.T) {
    fileLogger := NewMockedFileLogger()

    fileLogger.Log("Hello World!")

    assert.Equal(t, "Hello World!", string(fileLogger.File.(WriterMock).data))
}

测试输出:

--- FAIL: TestLog (0.00 seconds)
        Location:       filelogger_test.go:32
    Error:      Not equal: "Hello World!" (expected)
                    != "" (actual)

FAIL

正如我提到的,data []byte不会被写入,因为我无法将函数接收器设置为指针,因为它不能满足io.Writer


问题答案:

如果继续使用一个 指针WriterMock,它应该工作:

func NewMockedFileLogger() *FileLogger{
    writer := &WriterMock{}
    fileLogger := FileLogger{writer}
    return &fileLogger
}

然后:

 assert.Equal(t, "Hello World!", string(fileLogger.File.(*WriterMock).data))

我错过了:

func (this *WriterMock) Write(b []byte) (n int, err error) {
...
}

您需要调用Write()指针接收器,而不是值接收器。
由于所有内容都是通过Go中的值传递的,因此使用值接收器将 复制WriterMock实例。



 类似资料:
  • 如何通过不同的测试数据在Playwright测试运行测试?比如从CSV文件发送测试数据?

  • 我尝试使用MockMVC和TestRestTemboard。在这两种情况下,返回的响应都是404,但是APIendpoint在集成测试之外工作(当我自己运行Spring应用时)。 有没有人有一个可以工作的示例应用程序,它使用SpringDataREST对生成的控制器进行了工作集成测试? 我还可以编写针对自己控制器的常规集成测试(非SDR类型) 测试代码: 回购: 好的,我发现了问题,但我不知道答案

  • 问题内容: 我们使用“grandor”测试内部AngularJS应用程序。 除了功能测试之外,我们还可以在 是什么 基于nodejs 图书馆。“因为是表演 功能“. 使用“detactor perf”,我们可以测量和断言不同的性能 进行浏览器操作时的特征,针对 示例: 现在,对于另一个内部应用程序,我们有一组基于硒的测试 用Python编写。 是否可以使用selenium python检查性能回归

  • 主要内容:功能测试的目标功能测试是软件测试的一个分支,旨在验证软件应用程序的功能,而不管功能是否根据需求规范运行。通过给出适当的输入值,确定输出并使用预期输出验证实际输出来测试每个功能。 功能测试包括通过GUI(图形用户界面),API(应用程序接口),安全性,数据库,客户端应用程序,服务器应用程序和应用程序功能进行测试。黑盒测试方法用于功能测试,其中测试内部逻辑的工作而不窥视内部代码。 功能测试的目标 功能测试的目标是检

  • 性能测试应该有两个方向: 单接口压力测试 生产环境模拟用户操作高压力测试 生产环境模拟测试,目前我们都是交给公司的 QA 团队专门完成的。这块我只能粗略列举一下: 获取 1000 用户以上生产用户的访问日志(统计学要求 1000 是最小集合) 计算指定时间内(例如 10 分钟),所有接口的触发频率 使用测试工具(loadrunner, jmeter 等)模拟用户请求接口 适当放大压力,就可以模拟

  • 功能测试从用户的角度验证场景。它类似于验收测试。 但是它不是通过 HTTP 进行通信,而是填充环境,如(填充)POST 和 GET 参数, 然后直接在代码里执行 Application 实例。 功能测试通常比验收测试快,并且在失败时提供详细的堆栈跟踪。 根据老司机的经验,功能测试应该是首选的,除非有专门的 Web 服务器设置 或者由 JavaScript 构建的复杂 UI。 功能测试是借助于具有良