testsql
testsql copied to clipboard
Generate test data from SQL files before testing and clear it after finished.
TestSQL

Generate test data from SQL files before testing and clear it after finished.
Contents
- Installation
- Usage
- API Reference
- See also
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