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回答

枫荇

2019-12-17

createAt字段由数据库自动创建,程序中不做任何赋值;

出现0时间可能有2个原因:

  1. 数据库自动创建没有生效

  2. 程序中显示的指定为0值

0
0

Smile苦笑00

提问者

2019-12-16

我看到您的代码中好像删掉了对时间的验证

0
0

仿微信抢红包 Golang实战多版本抢红包系统

Golang红包系统单体版+并发版+分布式+微服务版,四大金装版、超值必修课

582 学习 · 159 问题

查看课程