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