我正在尝试使用 Go 进行测试,但遇到了一些绊脚石。
我有以下代码:
package main
import (
"fmt"
"testing"
)
type ConformanceChange struct {
Val string
Proxy struct {
Address string
Port string
}
}
func Item(conformance ConformanceChange) string {
service := conformance.Proxy.Address
services := map[string]string{
"Word": "Now",
}
service = services[service]
fmt.Println("Service: ", service)
return service
}
func Test_Item(t *testing.T) {
type args struct {
conformance ConformanceChange
}
tests := []struct {
name string
args args
want string
}{
// TODO: Add test cases.
{name: "empty", args: args{
conformance: ConformanceChange{},
}, want: ""},
{name: "value", args: args{
conformance: ConformanceChange{Val: "test", Proxy: {Address: "d", Port: "d"}},
}, want: ""},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Item(tt.args.conformance); got != tt.want {
t.Errorf("getService() = %v, want %v", got, tt.want)
}
})
}
}
我希望能够在运行测试时将数据传递给 ConformanceChange.Proxy.Address
。我可以将数据传递给 ConformanceChange.Val
并且它可以工作。
有人可以告诉我正确的语法吗?
更新 Bless 提供的解决方案奏效了。
接下来,如果我有以下代码:
package main
import (
"fmt"
"testing"
)
type ConformanceChange struct {
Val string
Proxy struct {
Address string `json:address`
Port string `json:port`
}
}
func Item(conformance ConformanceChange) string {
service := conformance.Proxy.Address
services := map[string]string{
"Word": "Now",
}
service = services[service]
fmt.Println("Service: ", service)
return service
}
func Test_Item(t *testing.T) {
type args struct {
conformance ConformanceChange
}
tests := []struct {
name string
args args
want string
}{
// TODO: Add test cases.
{name: "empty", args: args{
conformance: ConformanceChange{},
}, want: ""},
{name: "value", args: args{
conformance: ConformanceChange{Val: "test", Proxy: struct {
Port string `json:port`
}(struct {
Port string
}{Port: "d"})},
}, want: ""},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Item(tt.args.conformance); got != tt.want {
t.Errorf("getService() = %v, want %v", got, tt.want)
}
})
}
}
我不想在我的测试中指定所有字段(因为它可能会变得混乱),我可以只指定一个吗?在上面的代码中,它失败了:
Cannot use 'struct { Port string
json:port }(struct { Port string }{Port: "d"})' (type struct {...}) as the type struct {...}
答案 0 :(得分:2)
创建结构体值时,应指定结构体。
{name: "value", args: args{
conformance: ConformanceChange{Val: "test", Proxy: struct{Address string; Port string}{Address: "d", Port: "d"}},
}, want: ""},
为避免重复,您可以定义一个 Proxy
结构
type Proxy struct {
Address string
Port string
}
type ConformanceChange struct {
Val string
Proxy Proxy
}
然后在初始化struct值时引用它
{name: "value", args: args{
conformance: ConformanceChange{Val: "test", Proxy: Proxy{Address: "d", Port: "d"}},
}, want: ""},