1 回答

TA贡献1806条经验 获得超5个赞
在您的测试中,您在数据库提供者级别模拟数据库,不再需要模拟。
没有冗余模拟的测试:
func TestCalculate(t *testing.T) {
// transaction is created inside `CalculateTransaction`, it will be started against mocked DB
// var tx *sqlx.Tx
var expectedError string
dbMock, mock, err := sqlmock.New()
if err != nil {
t.Fatalf("an error '%s' was not expected", err)
}
defer dbMock.Close()
// we use sql mock - no need to mock DB methods
// mockSQL = new(mocks.SQLRepository)
// mockSQL.On("BeginTX").Return(tx, nil)
mock.ExpectCommit()
// here you can add ExpectQuery or ExpectExec if usecase do any DB work
mock.ExpectRollback()
usecase := &calculationUsecase{
sqlRepo: dbMock
}
actualError := usecase.CalculateTransaction(context.Background(), 1)
require.EqualError(t, actualError, expectedError)
// it is good practice to check is all expectations are met
err = mock.ExpectationsWereMet()
require.NoError(t, err)
}
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报