我正在尝试检查返回的数据是否等于预期
这是我的功能:
func extractData(payload string) (interface{}, time.Time, error) {
eventTime := gjson.Get(payload, "data.eventDateTime").String()
dateTime, err := time.Parse("2006-01-02T15:04:05-07:00", eventTime)
if err != nil {
return nil, time.Time{}, fmt.Errorf("Date Time Error: %w", err)
}
body := data.Body{
EventTime: dateTime,
}
return body, dateTime, nil
}
这是我为它编写的单元测试:
func TestExtractData(t *testing.T) {
tests := []struct {
Name string
Payload string
ExpectedOutput interface{}
}{
{
Name: "test-2",
Payload: "{\"data\":\"2020-11-02T10:44:48+01:00\"}",
ExpectedOutput: data.Body{
EventTime: time.Date(2020, 11, 2, 10, 44, 48, 0, time.FixedZone("CET", 3600)),
},
},
}
for _, tt := range tests {
t.Run(tt.Name, func(t *testing.T) {
data, _, _ := extractData(tt.Payload)
assert.Equal(t, tt.ExpectedOutput, data)
})
}
}
测试失败,它输出:
{ 2020-11-02 10:44:48 +0100 CET} does not equal { 2020-11-02 10:44:48 +0100 CET}
我相信问题出在TimeZone
,但我很难编写测试代码。
我不想使用 测试它time.Equal
,因为 mydata.Body
并不总是包含该eventTime
元素。
我试过(通过临时使用类型而不是接口):
if !tt.ExpectedOutput.EventTime.Equal(data.EventTime) {
//throw error
}
它有效。
我也试过:
if !reflect.DeepEqual(tt.ExpectedOutput.EventTime, data.EventTime) {
t.Errorf("extractData() output = %v, want = %v",data,tt.ExpectedOutput)
}
上面的代码失败了。