https://github.com/alexsniffin/go-swap
Testing utility for swapping out private field members without the need of dependency inversion of control
https://github.com/alexsniffin/go-swap
go testing
Last synced: 6 months ago
JSON representation
Testing utility for swapping out private field members without the need of dependency inversion of control
- Host: GitHub
- URL: https://github.com/alexsniffin/go-swap
- Owner: alexsniffin
- License: mit
- Created: 2020-06-24T22:43:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-06-25T17:29:53.000Z (about 6 years ago)
- Last Synced: 2024-06-20T16:32:42.002Z (about 2 years ago)
- Topics: go, testing
- Language: Go
- Homepage:
- Size: 4.88 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-swap
Testing utility for swapping out private field members without the need of dependency inversion of control.
### Example
```go
ex := example{
nested: nestedFields{
subPrivateField: "old",
},
}
myPointer := swap.Init(&ex).
Find("nested", func(p unsafe.Pointer) interface{} {
return (*nestedFields)(p)
}).
Find("subPrivateFieldOne", func(p unsafe.Pointer) interface{} {
return (*string)(p)
}).Pointer()
// Assert type
str := myPointer.(*string)
// Reassign new value to pointer
*str = "new"
// swap.example{nested:swap.nestedFields{subPrivateFieldOne:"old", subPrivateFieldTwo:0, subPrivateFieldThree:0, subPrivateFieldFour:0, subPrivateFieldFive:false, subPrivateFieldSix:0, subPrivateFieldSeven:0}}
// swap.example{nested:swap.nestedFields{subPrivateFieldOne:"new", subPrivateFieldTwo:0, subPrivateFieldThree:0, subPrivateFieldFour:0, subPrivateFieldFive:false, subPrivateFieldSix:0, subPrivateFieldSeven:0}}
```