I have the following method to test, which uses a function imported from a package.
import x.y.z func abc() { ... v := z.SomeFunc() ... }
Is it possible to mock SomeFunc()
in golang?
To mock an imported function with Jest we use the jest. mock() function. jest. mock() is called with one required argument - the import path of the module we're mocking.
The simple answer is, if your function contains API / DB call (external call), you should mock it in your test environment.
Test Files and Test PackagesWithin a single folder, all Go files must be in the same package. The one exception is test files: those with a _test.go suffix. There is a really good reason for that: your test files should always be in a different package.
Yes, with a simple refactoring. Create a zSomeFunc
variable of function type, initialized with z.SomeFunc
, and have your package call that instead of z.SomeFunc()
:
var zSomeFunc = z.SomeFunc func abc() { // ... v := zSomeFunc() // ... }
In tests you may assign another function to zSomeFunc
, one that is defined in tests, and does whatever the test wants it to.
For example:
func TestAbc(t *testing.T) { // Save current function and restore at the end: old := zSomeFunc defer func() { zSomeFunc = old }() zSomeFunc = func() int { // This will be called, do whatever you want to, // return whatever you want to return 1 } // Call the tested function abc() // Check expected behavior }
See related / possible duplicate: Testing os.Exit scenarios in Go with coverage information (coveralls.io/Goveralls)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With