我在测试用例中突出显示了我希望某些东西应该去的地方。理想情况下,我想测试 i
是 WHAT_SHOULD_I_PUT_HERE
主.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()
}
}
最佳答案
Go 是一种类型化语言,因此 go 编译器保证这样定义的函数
func Create() *SomeType
将始终返回类型为 *SomeType
的值,因此您的示例似乎毫无意义。
另一方面,如果您将函数定义为返回一个接口(interface),无论是否为空,例如
func Create() interface{}
返回值的基础类型可以是任何实现该接口(interface)的类型,在这种情况下,对基础类型的测试在某些情况下可能有意义。
您可以使用 reflect测试两个值是否具有相同类型的包。具体功能 reflect.TypeOf返回 reflect.Type 类型的值.
来自文档:
Type values are comparable, such as with the == operator. Two Type values are equal if they represent identical types.
例子:
package main
import (
"testing"
"reflect"
)
func TestCreate(t *testing.T) {
i := Create()
if reflect.TypeOf(i) != reflect.TypeOf(&SomeType{}) {
t.Error()
}
}
关于testing - 如何测试go中函数的返回值是指向类型的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47465173/