在Golang中,“testing.T”是什么意思?

3

我正在学习《使用Go编写解释器》时,在词法分析器的测试单元中遇到了这行代码:

package lexer 

import ( 

"testing"

"monkey/token"

)

func TestNextToken(t *testing.T) {
}

"

“t *testing.T”的目的是什么?我知道它是指向测试库中某个字段的指针,但我不确定它在做什么。

代码后面会这样使用:

"
for i, tt := range tests { 
     tok := l.NextToken()

     if tok.Type != tt.expectedType { 
          t.Fatalf("tests[%d] - tokentype wrong. expected=%q, got=%q", i, tt.expectedType, tok.Type) 
     }

     if tok.Literal != tt.expectedLiteral { 
           t.Fatalf("tests[%d] - literal wrong. expected=%q, got=%q", i, tt.expectedLiteral, tok.Literal) 
     }
}


我已经仔细阅读了Golang testing docs,但并没有真正理解它的目的以及为什么要将其传递给测试函数。文档上只是提到"将该类型传递给Test函数以管理测试状态并支持格式化测试日志",但我不确定如何在上述代码的上下文中解释它。

Go编译器使用t *testing.T中的方法来确定您的测试结果。在其他语言中,您可能需要编写一个断言,例如expect(true).toBe(true),而在Go中,除非您使用第三方包,否则只需使用常规的if语句来断言某些内容,然后调用t中的方法告诉编译器您正在测试的内容是否已通过或失败。 - Firmino Changani
Ttesting 包中命名不太合适的类型,它的实例作为测试运行时的接口。你主要使用它通过调用 t.Error() 等方法来通知运行时测试失败,这反过来又会影响启动测试的 go test 命令的退出状态。 - Zyl
1个回答

5
func TestNextToken(t *testing.T)这个函数需要一个指向testing包中类型T的指针作为参数。T代表测试,F代表模糊测试,B代表基准测试等等。这个指针被赋值给变量ttesting.T存储了测试的状态。当Go调用你的测试函数时,它会向每个函数传递相同的testing.T(假定如此)。你可以调用它的方法,例如t.Fail表示测试失败,或者t.Skip表示测试被跳过等等。它会记住所有这些内容,Go用它来报告所有测试函数中发生的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接