Основная идея [Soft Mocks для PHP][1] — это переписывание кода «на лету» перед include(), чтобы можно было поменять реализацию любых методов, функций и констант во время исполнения. Поскольку go — компилируемый язык, то логично делать то же самое на этапе компиляции. В этой статье я расскажу по свой проект Soft Mocks for Go.
Возможности Soft Mocks for Go весьма ограничены — вы можете временно переопределить нужные вам функции и методы, а потом откатить свои правки. Также можно вызвать оригинальную функцию.
При использовании soft mocks, следующий код:
func main() {
closeFunc := (*os.File).Close
soft.Mock(closeFunc, func(f *os.File) error {
fmt.Printf("File is going to be closed: %s\n", f.Name())
res, _ := soft.CallOriginal(closeFunc, f)[0].(error)
return res
})
fp, _ := os.Open("/dev/null")
fmt.Printf("Hello, world: %v!\n", fp.Close())
}
Напечатает вот что:
File is going to be closed: /dev/null
Hello, world: !
Скачать библиотеку можно по адресу: [github.com/YuriyNasretdinov/golang-soft-mocks][2]
[Читать дальше →][3]
[1]:
https://habrahabr.ru/company/badoo/blog/279617/
[2]:
https://github.com/YuriyNasretdinov/golang-soft-mocks
[3]:
https://habrahabr.ru/post/328620/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut