TestAccountDao_UpdateBalance测试未通过
来源:5-7 资金账户模块-账户表红包账户查询数据库访问层的测试用例编码实战
Smile苦笑00
2019-12-15
我的代码和老师的一样肯定没有为题
func TestAccountDao_UpdateBalance(t *testing.T) {
err := base.Tx(func(runner *dbx.TxRunner) error {
dao := &AccountDao{
runner: runner,
}
balance := decimal.NewFromFloat(100)
Convey("更新账户余额", t, func() {
a := &Account{
Balance: balance,
Status: 1,
AccountNo: ksuid.New().Next().String(),
AccountName: "测试资金账户",
UserId: ksuid.New().Next().String(),
Username: sql.NullString{String: "测试用户", Valid: true},
}
id, err := dao.Insert(a)
So(err, ShouldBeNil)
So(id, ShouldBeGreaterThan, 0)
//1.增加余额
Convey("增加余额", func() {
amount := decimal.NewFromFloat(10)
rows, err := dao.UpdateBalance(a.AccountNo, amount)
So(err, ShouldBeNil)
So(rows, ShouldEqual, 1)
na := dao.GetOne(a.AccountNo)
newBalance := balance.Add(amount)
So(na, ShouldNotBeNil)
So(na.Balance.String(), ShouldEqual, newBalance.String())
So(na.CreatedAt, ShouldEqual, a.CreatedAt)
})
//2.扣减余额,余额足够
//3.扣减余额,余额不足
})
return nil
})
if err != nil {
logrus.Error(err)
}
}
但是在运行时出错
Failures:
* E:/resk-project/src/smilehacker.net/resk/core/accounts/dao_account_test.go
Line 108:
Expected: '0001-01-01 00:00:00 +0000 UTC'
Actual: '2019-12-15 23:28:15.339 +0800 CST'
(Should be equal)
我们在services中定义createAt为time.Time类型,但是没有设置默认值,所以Golang默认生成的时间为0001001-01 00:00:00 +0000 UTC
,而Mysql在插入数据时会自动生成当前时间,所以会出现这个错误。
我想知道这个错误应该怎么解决,老师在视频中好像并没有出现这个错误。
写回答
2回答
-
createAt字段由数据库自动创建,程序中不做任何赋值;
出现0时间可能有2个原因:
数据库自动创建没有生效
程序中显示的指定为0值
00 -
Smile苦笑00
提问者
2019-12-16
我看到您的代码中好像删掉了对时间的验证
00