Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I don't know much about Go but in Java and C# mocking frameworks use runtime bytecode manipulation to make it really easy to swap out concrete implementations without needing to create separate interfaces.


> I don't know much about Go but in Java and C# mocking frameworks use runtime bytecode manipulation to make it really easy to swap out concrete implementations without needing to create separate interfaces.

You cannot do that in Go, you need to write interfaces upfront. Or you can't unit test a controller that depends on a repository which concrete implementation relies on a database.

There is no "bytecode manipulation" here, since there is no bytecode.


Go compiles straight to native code, so unless you get a framework to re-write Assembly, it is not going to happen.


X86 assembly rewriting software does exist. Although I'm not aware anyone ever using it for this purpose... yet.

Getting it to the point actual implementations are replaced by mocks at binary level... might be rather challenging.

(In Golang, tests mainly work like this: foo.go tests are in foo_test.go. "go test" would then run the unit tests for foo in foo_test.)

https://www.golang-book.com/books/intro/12


Of course they do exist, but they are very fragile, usually only work in a very specific architecture, compiler version and compilation flags.

As for your test example, it doesn't work if you need to mock a library only available in binary form.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: