Testing 如何测试go中函数的返回值是否是指向类型的指针?

Testing 如何测试go中函数的返回值是否是指向类型的指针?,testing,go,Testing,Go,我已经在测试用例中强调了我期望的东西应该去哪里。理想情况下,我想测试I是否是应该放在这里的内容的一个实例 梅因,加油 package main import "fmt" type SomeType struct { thingThatNeedsSetup struct{} } func Create() *SomeType { return &SomeType{} } func main() { a := Create() fmt.Println(

我已经在测试用例中强调了我期望的东西应该去哪里。理想情况下,我想测试
I
是否是
应该放在这里的内容的一个实例

梅因,加油

package main

import "fmt"

type SomeType struct {
    thingThatNeedsSetup struct{}
}

func Create() *SomeType {
    return &SomeType{}
}

func main() {
    a := Create()
    fmt.Println(a.thingThatNeedsSetup)
}
main_test.go

package main

import (
    "testing"
)

func TestCreate(t *testing.T) {

    i := Create()

    if i != WHAT_SHOULD_I_PUT_HERE {
        t.Error()
    }   
}

Go是一种类型化语言,因此Go编译器保证函数的定义是这样的

func Create() *SomeType
将始终返回类型为
*SomeType
的值,因此您的示例似乎毫无意义


另一方面,如果您将函数定义为返回接口,无论是否为空,例如

func Create() interface{}
返回值的底层类型可以是实现该接口的任何东西,在这种情况下,在某些情况下测试底层类型可能有意义


您可以使用该包测试两个值是否具有相同的类型。特别是返回类型为的值的函数

从文档中:

类型值是可比较的,例如使用==运算符。两类 如果值表示相同的类型,则它们是相等的

例如:

package main

import (
    "testing"
    "reflect"
)

func TestCreate(t *testing.T) {

    i := Create()

    if reflect.TypeOf(i) != reflect.TypeOf(&SomeType{}) {
        t.Error()
    }
}

谢谢,这就是我想要的。我一直在测试“*SomeType{}”,而不是“&SomeType{}”
rv := reflect.ValueOf(v)
rv.Kind() == reflect.Ptr