Golang interfaces & mocking

前端 未结 2 1525
谎友^
谎友^ 2021-02-20 16:38

I\'m having hard times writing unit tests in Go due to external libraries which don\'t expose an interface (therefore not mockable) but only pure functions. Even big ones like G

2条回答
  •  攒了一身酷
    2021-02-20 17:35

    IMO this is a super common solution and strikes a good balance between maintainability and testability.

    The way I think of this is that your code is programming to an interface, and there just happens to be two implementations:

    • "prod" version ie the library that you're testing
    • test version, a stub that implements the interface

    With this approach, a stub can only verify up to your service and its dependencies boundary along the contract of the interface, it assures very little or nothing about your components collaboration/integration with the library that's being stubbed. In my experiences this approach works awesome and is my personal preference. I have found it to be important though to have 1 or 2 higher level tests making sure that your component can successfully initialize and interact with the "prod" version of the library.


    Plug:

    I've written about this exact issue https://medium.com/dm03514-tech-blog/you-are-going-to-need-it-using-interfaces-and-dependency-injection-to-future-proof-your-designs-2cf6f58db192

提交回复
热议问题