alexsniffin / go-swap

Testing utility for swapping out private field members without the need of dependency inversion of control

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

go-swap

Testing utility for swapping out private field members without the need of dependency inversion of control.

Example

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}}

About

Testing utility for swapping out private field members without the need of dependency inversion of control

License:MIT License


Languages

Language:Go 100.0%