Git Product home page Git Product logo

testsql's Introduction

TestSQL

Build Status codecov.io Go Report Card GoDoc

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

See also

Examples

testsql's People

Contributors

zhulongcheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

testsql's Issues

这种写法应该很容易导致报错吧

"github.com/go-sql-driver/mysql"

比如我在项目中引用了你的包,然后不小心在外面又像下面这样导入了一次 mysql-driver

import _ "github.com/go-sql-driver/mysql"

很容易导致错误:

panic: sql: Register called twice for driver mysql

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.