testutil

package
v0.6.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 4, 2024 License: MIT Imports: 9 Imported by: 1

README

Test Utils

testutil provide some test help util functions. eg: http test, mock ENV value

  • assert go tests helper
  • env variable mocks
  • http request mock

Install

go get github.com/gookit/goutil/testutil

assert tests

package assert_test

import (
	"testing"

	"github.com/gookit/goutil/errorx"
	"github.com/gookit/goutil/testutil/assert"
)

func TestErr(t *testing.T) {
	err := errorx.Raw("this is a error")

	assert.NoErr(t, err, "user custom message")
	assert.ErrMsg(t, err, "this is a error")
}

Run tests for special method:

go test -v -run ^TestErr$
go test -v -run ^TestErr$ ./testutil/assert/...

Error on fail:

test-err

Mock for tests

More test utils

Wraps buffer

testutil.Buffer is wraps the bytes.Buffer and useful for testing. Will not return error on call WriteX methods

func (b *Buffer) WriteString(ss ...string) // will not return error
func (b *Buffer) WriteAny(vs ...interface{})
func (b *Buffer) ResetAndGet() string
Wraps writer

testutil.TestWriter is wraps the testutil.Buffer. it can be custom return error on write, close, flush.

Examples:

package testutil_test

import (
	"testing"

	"github.com/gookit/goutil/testutil"
	"github.com/gookit/goutil/testutil/assert"
)

func TestNewTestWriter(t *testing.T) {
	tw := testutil.NewTestWriter()
	_, err := tw.Write([]byte("hello"))
	assert.NoErr(t, err)
	assert.Eq(t, "hello", tw.String())
	assert.NoErr(t, tw.Flush())
	assert.Eq(t, "", tw.String())
	assert.NoErr(t, tw.Close())

	tw.SetErrOnWrite()
	_, err = tw.Write([]byte("hello"))
	assert.Err(t, err)
	assert.Eq(t, "", tw.String())

	tw.SetErrOnFlush()
	assert.Err(t, tw.Flush())

	tw.SetErrOnClose()
	assert.Err(t, tw.Close())
}

Functions API

func ClearOSEnv()
func DiscardStdout() error
func MockCleanOsEnv(mp map[string]string, fn func())
func MockEnvValue(key, val string, fn func(nv string))
func MockEnvValues(kvMap map[string]string, fn func())
func MockOsEnv(mp map[string]string, fn func())
func MockOsEnvByText(envText string, fn func())
func MockRequest(h http.Handler, method, path string, data *MD) *httptest.ResponseRecorder
func NewHttpRequest(method, path string, data *MD) *http.Request
func RestoreStderr(printData ...bool) (s string)
func RestoreStdout(printData ...bool) (s string)
func RevertOSEnv()
func RewriteStderr()
func RewriteStdout()
type Buffer struct{ ... }
    func NewBuffer() *Buffer
type M map[string]string
type MD struct{ ... }
type TestWriter struct{ ... }
    func NewTestWriter() *TestWriter

Code Check & Testing

gofmt -w -l ./
golint ./...
go test ./...

Testing in docker:

cd goutil
docker run -ti -v $(pwd):/go/work golang:1.18
root@xx:/go/work# go test ./...

Upgrade interface{} to any:

# 查看此次替换会影响到的源文件列表
gofmt -l -r 'interface{} -> any' .
# do 
gofmt -w -r 'interface{} -> any' .

Documentation

Overview

Package testutil provide some test help util functions. eg: http test, mock ENV value

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClearOSEnv added in v0.5.12

func ClearOSEnv()

ClearOSEnv info.

Usage:

testutil.ClearOSEnv()
defer testutil.RevertOSEnv()
// do something ...

func DiscardStdout

func DiscardStdout() error

DiscardStdout Discard os.Stdout output

Usage:

DiscardStdout()
fmt.Println("Hello, playground")
RestoreStdout()

func MockCleanOsEnv added in v0.5.5

func MockCleanOsEnv(mp map[string]string, fn func())

MockCleanOsEnv by env map data.

will clear all old ENV data, use given data map. will recover old ENV after fn run.

func MockEnvValue added in v0.1.6

func MockEnvValue(key, val string, fn func(nv string))

MockEnvValue will store old env value, set new val. will restore old value on end.

func MockEnvValues added in v0.1.6

func MockEnvValues(kvMap map[string]string, fn func())

MockEnvValues will store old env value, set new val. will restore old value on end.

func MockOsEnv added in v0.3.13

func MockOsEnv(mp map[string]string, fn func())

MockOsEnv by env map data. alias of MockCleanOsEnv

func MockOsEnvByText added in v0.3.13

func MockOsEnvByText(envText string, fn func())

MockOsEnvByText by env multi line text string. will clear all old ENV data, use given data map, and will recover old ENV after fn run.

Usage:

testutil.MockOsEnvByText(`
	APP_COMMAND = login
	APP_ENV = dev
	APP_DEBUG = true

`, func() {
		// do something ...
})

func MockRequest

func MockRequest(h http.Handler, method, path string, data *MD) *httptest.ResponseRecorder

MockRequest mock an HTTP Request

Usage:

handler := router.New()
res := MockRequest(handler, "GET", "/path", nil)

// with data 1
body := strings.NewReader("string ...")
res := MockRequest(handler, "POST", "/path", &MD{
	Body: body,
	HeaderM: M{"x-head": "val"}
})

// with data 2
res := MockRequest(handler, "POST", "/path", &MD{
	BodyString: "data string",
	HeaderM: M{"x-head": "val"}
})

func NewBuffer added in v0.5.6

func NewBuffer() *byteutil.Buffer

NewBuffer instance

func NewDirEnt added in v0.6.9

func NewDirEnt(fpath string, isDir ...bool) *fakeobj.DirEntry

NewDirEnt create a fs.DirEntry

func NewEchoServer added in v0.6.10

func NewEchoServer() *httptest.Server

NewEchoServer create an echo server for testing.

Usage on testing:

var testSrvAddr string

func TestMain(m *testing.M) {
	// create server
	s := testutil.NewEchoServer()
	defer s.Close()
	testSrvAddr = "http://" + s.Listener.Addr().String()
	fmt.Println("Test server listen on:", testSrvAddr)

	m.Run()
}

// in a test case ...
res := http.Get(testSrvAddr)
rpl := testutil.ParseRespToReply(res)
// assert ...

func NewHTTPRequest added in v0.6.11

func NewHTTPRequest(method, path string, data *MD) *http.Request

NewHTTPRequest for http testing Usage:

req := NewHttpRequest("GET", "/path", nil)

// with data 1
body := strings.NewReader("string ...")
req := NewHttpRequest("POST", "/path", &MD{
	Body: body,
	Headers: M{"x-head": "val"}
})

// with data 2
req := NewHttpRequest("POST", "/path", &MD{
	BodyString: "data string",
	Headers: M{"x-head": "val"}
})

func NewHttpRequest deprecated added in v0.3.6

func NewHttpRequest(method, path string, data *MD) *http.Request

NewHttpRequest for http testing, alias of NewHTTPRequest()

Deprecated: use NewHTTPRequest() instead.

func RestoreStderr added in v0.2.10

func RestoreStderr(printData ...bool) (s string)

RestoreStderr restore os.Stderr

func RestoreStdout

func RestoreStdout(printData ...bool) (s string)

RestoreStdout restore os.Stdout

func RestoreTimeLocal added in v0.6.13

func RestoreTimeLocal()

RestoreTimeLocal restore time.Local

func RevertOSEnv added in v0.5.12

func RevertOSEnv()

RevertOSEnv info

func RewriteStderr added in v0.2.10

func RewriteStderr()

RewriteStderr rewrite os.Stderr

Usage:

RewriteStderr()
fmt.Fprintln(os.Stderr, "Hello, playground")
msg := RestoreStderr()

func RewriteStdout

func RewriteStdout()

RewriteStdout rewrite os.Stdout

Usage:

RewriteStdout()
fmt.Println("Hello, playground")
msg := RestoreStdout()

func SetTimeLocal added in v0.6.13

func SetTimeLocal(tl *time.Location)

SetTimeLocal custom time.Local for testing.

func SetTimeLocalUTC added in v0.6.13

func SetTimeLocalUTC()

SetTimeLocalUTC custom time.Local=UTC for testing.

Types

type Buffer added in v0.5.6

type Buffer = byteutil.Buffer

Buffer wrap and extends the bytes.Buffer

type DirEnt added in v0.6.9

type DirEnt = fakeobj.DirEntry

DirEnt implements the fs.DirEntry

type EchoReply added in v0.6.10

type EchoReply struct {
	Origin string `json:"origin"`
	URL    string `json:"url"`
	Method string `json:"method"`
	// Query data
	Query   map[string]any `json:"query,omitempty"`
	Headers map[string]any `json:"headers,omitempty"`
	Form    map[string]any `json:"form,omitempty"`
	// Body data string
	Body  string         `json:"body,omitempty"`
	JSON  any            `json:"json,omitempty"`
	Files map[string]any `json:"files,omitempty"`
}

EchoReply http response data reply model

func BuildEchoReply added in v0.6.10

func BuildEchoReply(r *http.Request) *EchoReply

BuildEchoReply build reply body data

func ParseBodyToReply added in v0.6.10

func ParseBodyToReply(bd io.ReadCloser) *EchoReply

ParseBodyToReply parse http body to reply

func ParseRespToReply added in v0.6.10

func ParseRespToReply(w *http.Response) *EchoReply

ParseRespToReply parse http response to reply

func (*EchoReply) ContentType added in v0.6.10

func (r *EchoReply) ContentType() string

ContentType get content type

type M

type M map[string]string

M short name for map

type MD

type MD struct {
	// Headers headers
	Headers M
	// Body body. eg: strings.NewReader("name=inhere")
	Body io.Reader
	// BodyString quick add body.
	BodyString string
	// BeforeSend callback
	BeforeSend func(req *http.Request)
}

MD simple request data

type TestWriter added in v0.5.3

type TestWriter = fakeobj.Writer

TestWriter struct, useful for testing. alias of fakeobj.Writer

func NewTestWriter added in v0.5.3

func NewTestWriter() *TestWriter

NewTestWriter instance

Directories

Path Synopsis
Package assert Provides commonly asserts functions for help write Go testing.
Package assert Provides commonly asserts functions for help write Go testing.
Package fakeobj provides a fake object for testing.
Package fakeobj provides a fake object for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL