unit-testinggomockingtestify

Mocking method from golang package


I have been unable to find a solution to mocking methods from golang packages.

For example, my project has code that attempts to recover when Os.Getwd() returns an error. The easiest way I can thinking of making a unit test for this, is by mocking the Os.Getwd() method to return an error, and verify that the code works accordingly.

I tried using testify, but it does not seem to be possible.

Anyone have any experience with that?


Solution

  • My own solution was to take the method as an argument, which allow to inject a "mock" instead when testing. Additionnaly, create an exported method as public facade and an unexported one for testing.

    Example:

        func Foo() int {        
                return foo(os.Getpid)
        }                       
    
        func foo(getpid func() int) int {
                return getpid()      
        }