带指针引用的Go测试函数
我正在一个围棋项目中进行单元测试,我是新手。所以开始我想测试一些简单的东西。我从这个函数开始:带指针引用的Go测试函数,go,Go,我正在一个围棋项目中进行单元测试,我是新手。所以开始我想测试一些简单的东西。我从这个函数开始: func (this *Service) InList(idPerson string, personsId []string) bool { for _, personsId := range personsId { if id == idPerson { return true } } return false }
func (this *Service) InList(idPerson string, personsId []string) bool {
for _, personsId := range personsId {
if id == idPerson {
return true
}
}
return false
}
服务是在类顶部定义的结构
这是我写的测试:
func TestValidatePersonID(t *testing.T) {
personID := "12345"
personIDs := []string{"12345", "123456t", "1234567a"}
ok := *Service.InList(personID, personIDs)
if !ok {
t.Errorf("Id %v not found", personID)
}
}
如果我尝试在没有*的情况下呼叫服务,则会出现错误:
无效的方法表达式需要指针接收器
如果我尝试调用函数*Service.inList,它会说我缺少一个参数。如果有人能指出我做错了什么,以及我如何在测试中获得该服务的指针接收器,我就是新手?。我很欣赏。您必须在其接收器类型的实例上调用一个方法。因此,对于在*服务上定义的方法,必须在*服务的实例上调用它: 然而,在您的情况下,没有理由将此作为一种方法;它似乎和它的接收器没有任何关系,它从不引用它,所以它可能只是一个常规函数。还要注意的是,在围棋中给接受者命名是很不自然的
我还强烈建议至少采用交互式示例,其中详细介绍了编写方法。的正确语法是: 此代码段添加nil作为接收方参数,并使用括号正确指定类型 这个问题中使用的方法不是惯用的。或者对值调用一个方法
s := Service{}
ok := s.InList(personID, personIDs)
或者将该方法转换为函数。如果不引用接收器对象,则不应使用接收器对象,请尽可能简化代码 有三种编写方法或函数的方法,每种方法都有自己的目的 如果没有接收者,当函数中没有引用接收者时,我们称之为函数 一个值接收者,接收者被引用,但在我们称之为方法的方法中没有改变 指针接收器,接收器中的某些内容将在方法中更改
虽然在技术上是准确的,但这并不是一个在野外经常看到的构造。在实际的nil指针上调用方法比将方法作为这样的函数调用更常见。请不要说出这个名字。
ok := (*Service).InList(nil, personID, personIDs)
s := Service{}
ok := s.InList(personID, personIDs)