Awesome
TestSQL
Generate test data from SQL files before testing and clear it after finished.
Contents
Installation
go get github.com/zhulongcheng/testsql
Usage
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)
// }
}
API Reference
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.
FQA
Set sql-driver/orm to read/write data from TestSQL's DSN
db := yourSQLDriver.Open(TS.Config.DSN)
// or db := yourORM.Open(TS.Config.DSN)
yourModel.SetDB(db) // reset db