> I personally am not a fan of too many abstractions.
Then you're likely in the wrong business, since most of what programming is is dealing with the various facets of one abstraction or another.
Absolutely. I'm not saying I don't want to abstract anything or deal with any abstractions which can lead to ridiculous code [0].
I just prefer to abstract when I have more reasons that just testing. That can be done using mocking techniques.
https://docs.spring.io/spring/docs/2.5.x/javadoc-api/org/spr...
This is definitely a valid approach to software development, e.g. in embedded development (where you still might need to call APIs).
If the only reason for abstraction is testing, then mocking an interface seems like a more valid choice to me.