我在测试用例中突出显示了我希望应该采取的措施。理想情况下,我想测试i
是WHAT_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()
}
}
答案 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