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

标签 testing go

我在测试用例中突出显示了我希望某些东西应该去的地方。理想情况下,我想测试 iWHAT_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/

相关文章:

go - 仅更新 golang 中的非空结构字段

java - 如何使用 Junit 监视 Java 中的方法?

c# - 如何更改被 mock 的对象?

ruby-on-rails - 尝试运行 rspec 时,我得到 "uninitialized constant ActiveModel"

google-app-engine - 如何解决 "no matching index found."错误

debugging - exec.Command 无法在 Debug模式下运行

json - 如何将 JSON 字符串解析为结构

c# - BDD SpecFlow 场景

eclipse - 如何在每次运行 htmlUnit 或 Selenium 测试之前始终设置正确数量的标签? eclipse

索引中结构的 Golang 模板属性