Generate test data from SQL files before testing and clear it after finished.
go get github.com/zhulongcheng/testsql
Create a folder for the table-schema file and sql files:
testsql
├── fixtures
│ └── users.sql
└── schema.sql
The table-schema file include all tables schema, it would be like this:
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(32) CHARACTER SET utf8mb4 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
The sql file would be like this:
INSERT INTO `users` (`id`, `name`)
VALUES
(1, 'foo');
Your tests would be like this:
var TS *testsql.TestSQL
func newTS() *testsql.TestSQL {
dsn := "user:password@tcp(host:port)/test_db_name"
tableSchemaPath := "testsql/schema.sql"
dirPath := "testsql/fixtures"
ts := testsql.New(dsn, tableSchemaPath, dirPath)
return ts
}
func initTestDB() {
TS = newTS()
// set sql-driver/orm to read/write data from TS's DSN
// Driver = sql.Open(TS.Config.DSN)
// ORM = ORM.New(TS.Config.DSN)
}
func TestMain(m *testing.M) {
initTestDB()
r := m.Run()
TS.DropTestDB()
os.Exit(r)
}
func TestUser(t *testing.T) {
TS.Use("users.sql")
defer TS.Clear()
// user := GetUserByID(1)
// if user.name != "foo" {
// t.Errorf("not equal, expected: %s, actual: %s", "foo", user.name)
// }
}
TestSQL.Exec
generates test data from sql string.
TestSQL.Use
generates test data from sql files.
TestSQL.Clear
deletes data of all tables
TestSQL.DropTestDB
drops the database created by TestSQL.
db := yourSQLDriver.Open(TS.Config.DSN)
// or db := yourORM.Open(TS.Config.DSN)
yourModel.SetDB(db) // reset db