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

时间:2017-11-24 01:24:37

标签: testing go

我在测试用例中突出显示了我希望应该采取的措施。理想情况下,我想测试iWHAT_SHOULD_I_PUT_HERE

的实例

main.go

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()
    }   
}

2 个答案:

答案 0 :(得分:2)

Go是一种类型语言,因此go编译器保证了一个定义为

的函数
func Create() *SomeType

将始终返回*SomeType类型的值,因此您的示例似乎毫无意义。

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

func Create() interface{}

返回值的基础类型可以是实现该接口的任何内容,在这种情况下,在某些情况下测试基础类型可能有意义。

您可以使用reflect包来测试两个值是否具有相同的类型。特别是函数reflect.TypeOf,它返回类型为reflect.Type的值。

来自文档:

  

类型值具有可比性,例如使用==运算符。两种类型   如果它们代表相同的类型,则它们是相等的。

示例:

package main

import (
    "testing"
    "reflect"
)

func TestCreate(t *testing.T) {

    i := Create()

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

答案 1 :(得分:0)

rv := reflect.ValueOf(v)
rv.Kind() == reflect.Ptr