mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
gofuzz
 | 
						|
======
 | 
						|
 | 
						|
gofuzz is a library for populating go objects with random values.
 | 
						|
 | 
						|
[](https://godoc.org/github.com/google/gofuzz)
 | 
						|
[](https://travis-ci.org/google/gofuzz)
 | 
						|
 | 
						|
This is useful for testing:
 | 
						|
 | 
						|
* Do your project's objects really serialize/unserialize correctly in all cases?
 | 
						|
* Is there an incorrectly formatted object that will cause your project to panic?
 | 
						|
 | 
						|
Import with ```import "github.com/google/gofuzz"```
 | 
						|
 | 
						|
You can use it on single variables:
 | 
						|
```go
 | 
						|
f := fuzz.New()
 | 
						|
var myInt int
 | 
						|
f.Fuzz(&myInt) // myInt gets a random value.
 | 
						|
```
 | 
						|
 | 
						|
You can use it on maps:
 | 
						|
```go
 | 
						|
f := fuzz.New().NilChance(0).NumElements(1, 1)
 | 
						|
var myMap map[ComplexKeyType]string
 | 
						|
f.Fuzz(&myMap) // myMap will have exactly one element.
 | 
						|
```
 | 
						|
 | 
						|
Customize the chance of getting a nil pointer:
 | 
						|
```go
 | 
						|
f := fuzz.New().NilChance(.5)
 | 
						|
var fancyStruct struct {
 | 
						|
  A, B, C, D *string
 | 
						|
}
 | 
						|
f.Fuzz(&fancyStruct) // About half the pointers should be set.
 | 
						|
```
 | 
						|
 | 
						|
You can even customize the randomization completely if needed:
 | 
						|
```go
 | 
						|
type MyEnum string
 | 
						|
const (
 | 
						|
        A MyEnum = "A"
 | 
						|
        B MyEnum = "B"
 | 
						|
)
 | 
						|
type MyInfo struct {
 | 
						|
        Type MyEnum
 | 
						|
        AInfo *string
 | 
						|
        BInfo *string
 | 
						|
}
 | 
						|
 | 
						|
f := fuzz.New().NilChance(0).Funcs(
 | 
						|
        func(e *MyInfo, c fuzz.Continue) {
 | 
						|
                switch c.Intn(2) {
 | 
						|
                case 0:
 | 
						|
                        e.Type = A
 | 
						|
                        c.Fuzz(&e.AInfo)
 | 
						|
                case 1:
 | 
						|
                        e.Type = B
 | 
						|
                        c.Fuzz(&e.BInfo)
 | 
						|
                }
 | 
						|
        },
 | 
						|
)
 | 
						|
 | 
						|
var myObject MyInfo
 | 
						|
f.Fuzz(&myObject) // Type will correspond to whether A or B info is set.
 | 
						|
```
 | 
						|
 | 
						|
See more examples in ```example_test.go```.
 | 
						|
 | 
						|
Happy testing!
 |