Database dalam memori mysql untuk pengujian unit

Pengujian unit di Go sederhana, buat foo_test. pergi impor pengujian dan jalankan go test ./.... Tapi kemudian ada pertanyaan SQL, kendala, CRUD. dan tiba-tiba Anda membutuhkan PostgresQL, menyiapkan skrip, dan tidak ada yang mudah lagi

Idenya adalah untuk menghindari penyiapan, penginstalan DBMS, dan manajemen kredensial selama mungkin. Mesin unik terikat pada satu sql. DB dengan sql sebanyak-banyaknya. Conn sesuai kebutuhan menyediakan DataSourceName yang unik. Intinya. Satu DataSourceName per pengujian dan Anda memiliki isolasi pengujian penuh dalam waktu singkat

Instalasi

  go get github.com/proullon/ramsql

Penggunaan

Katakanlah Anda ingin menguji fungsi LoadUserAddresses

func LoadUserAddresses[db *sql.DB, userID int64] [[]string, error] {
	query := `SELECT address.street_number, address.street FROM address 
							JOIN user_addresses ON address.id=user_addresses.address_id 
							WHERE user_addresses.user_id = $1;`

	rows, err := db.Query[query, userID]
	if err != nil {
		return nil, err
	}

	var addresses []string
	for rows.Next[] {
		var number int
		var street string
		if err := rows.Scan[&number, &street]; err != nil {
			return nil, err
		}
		addresses = append[addresses, fmt.Sprintf["%d %s", number, street]]
	}

	return addresses, nil
}
_

Gunakan RamSQL untuk mengujinya dalam mesin SQL dalam memori terisolasi sekali pakai

package myproject 

import [
	"database/sql"
	"fmt"
	"testing"

	_ "github.com/proullon/ramsql/driver"
]


func TestLoadUserAddresses[t *testing.T] {
	batch := []string{
		`CREATE TABLE address [id BIGSERIAL PRIMARY KEY, street TEXT, street_number INT];`,
		`CREATE TABLE user_addresses [address_id INT, user_id INT];`,
		`INSERT INTO address [street, street_number] VALUES ['rue Victor Hugo', 32];`,
		`INSERT INTO address [street, street_number] VALUES ['boulevard de la République', 23];`,
		`INSERT INTO address [street, street_number] VALUES ['rue Charles Martel', 5];`,
		`INSERT INTO address [street, street_number] VALUES ['chemin du bout du monde ', 323];`,
		`INSERT INTO address [street, street_number] VALUES ['boulevard de la liberté', 2];`,
		`INSERT INTO address [street, street_number] VALUES ['avenue des champs', 12];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [2, 1];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [4, 1];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [2, 2];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [2, 3];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [4, 4];`,
		`INSERT INTO user_addresses [address_id, user_id] VALUES [4, 5];`,
	}

	db, err := sql.Open["ramsql", "TestLoadUserAddresses"]
	if err != nil {
		t.Fatalf["sql.Open : Error : %s\n", err]
	}
	defer db.Close[]

	for _, b := range batch {
		_, err = db.Exec[b]
		if err != nil {
			t.Fatalf["sql.Exec: Error: %s\n", err]
		}
	}

	addresses, err := LoadUserAddresses[db, 1]
	if err != nil {
		t.Fatalf["Too bad! unexpected error: %s", err]
	}

	if len[addresses] != 2 {
		t.Fatalf["Expected 2 addresses, got %d", len[addresses]]
	}

}

Selesai. Tidak perlu menjalankan PostgreSQL atau penyiapan. Pengujian Anda diisolasi, dan sesuai dengan alat go

Biner RamSQL

Katakanlah Anda memiliki SQL yang menjelaskan struktur aplikasi Anda

CREATE TABLE IF NOT EXISTS address [id BIGSERIAL PRIMARY KEY, street TEXT, street_number INT];
CREATE TABLE IF NOT EXISTS user_addresses [address_id INT, user_id INT];

Anda mungkin ingin menguji validitasnya

$ go install github.com/proullon/ramsql
$ ramsql  Query OK. 1 rows affected
ramsql> Query OK. 1 rows affected
$ echo $?
0
_

Fitur

Pengujian unit

  • Isolasi penuh antara tes
  • Tidak ada pengaturan [baik file atau database]
  • Penampilan yang bagus

penguraian SQL

  • Validasi skema database
  • ALTER validasi file

Tes stres

  • Kesalahan penuh sistem file dengan ukuran basis data maksimum yang dapat dikonfigurasi
  • Kueri lambat yang dapat dikonfigurasi secara acak
  • Pemutusan acak

Kesesuaian

GORM

Jika Anda bermaksud menggunakan ramsql dengan GORM ORM, Anda harus menggunakan driver GORM Postgres. Sebuah contoh kerja akan

Haruskah saya menggunakan di

Penyedia Database Dalam Memori EF Core . Sementara beberapa pengguna menggunakan database dalam memori untuk pengujian, hal ini umumnya tidak disarankan ; .

Cara menggunakan di

Pengujian Mandiri Menggunakan Database Dalam Memori .
Ringkasan. Dalam tutorial ini, kita akan membuat aplikasi Spring sederhana yang bergantung pada database dalam memori untuk pengujian. .
Ketergantungan Maven. .
Model Data dan Repositori. .
Sumber Properti Terpisah. .
Membuat Tes JUnit. .
Kesimpulan

Apakah MySQL masuk

MySQL adalah salah satu database relasional paling populer yang tersedia dan memiliki dukungan bawaan untuk membuat tabel tertentu yang akan disimpan di memori dan bertindak serupa dengan database dalam memori khusus . .

Bagaimana MySQL digunakan dalam pengujian?

Mesin uji mysqltest memeriksa kode hasil dari mengeksekusi setiap pernyataan SQL dalam masukan uji . Jika kegagalan tidak terduga, test case gagal. Test case bisa gagal jika kesalahan diharapkan tetapi tidak terjadi [misalnya, jika pernyataan SQL berhasil padahal seharusnya gagal].

Bài mới nhất

Chủ Đề