You are completely wrong.
Mocking is a huge design smell. The more mocks or integration tests your projects requires to get full coverage the less modular your program is. A program that uses many mocks is a sign of very very poor design. You will find the code more complex to reason about and much harder to reuse code without necessitating a lot of glue code to make things work together. Without proper knowledge you won't even know the program is poorly designed.
I will grant you that 90% of programmers out there don't know how to design programs in a truly modular way, so most engineering projects will require extensive mocking. In fact most engineers can go through their entire career without knowing that they are making their programs more complex and less modular then it needs to be. Following certain design principles I have seen incredibly complex projects require nearly zero mocking (very very rare though).
Mocking indicates a module is dependent on something. Dependency is different from composition.
Dependencies Composition
C C
+---------------------+
| | +----------------+ +-----------------+
| A | | | | |
| | | | | |
| +----------+ | | | | |
| | | | in | | | | out
| | | | -->+ A +------>+ B +-->
| | B | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| +----------+ | | | | |
+---------------------+ +----------------+ +-----------------+
What's going on here? Both examples involve the creation of module C from A and B.
left: 'A' exists as wrapper code around B and is useless on its own. To unit test A you must mock B.
right: every module is reuseable on its own. Nothing needs to be mocked during unit testing. No dependencies.
The only exception to the right example where you MUST mock is a function that does IO. IO functions cannot be unit tested period, they can only be tested with integration tests.
There's a name for the left approach. It's called Object oriented programming using inheritance or composition(the oop version of composition; not functional composition) as a design pattern. (both are bad)
There's also a name for the right approach. It's called functional programming using function composition.
I don't advocate that you strictly follow either style. Just know that when you go left you lose modularity and when you go right you gain it. All functional programming does is force your entire program to be modular down to the smallest primitive unit. Extensive mocking in your program means you went too far to the left.
tangent: Another irony around this world is that a lot of functional programmers (javascript and react developers especially) don't even know about the primary benefit of functional programming. They harp about things like "immutability" or how its more convenient to write a map reduce rather than a for loop without truly ever knowing the real benefits of the style. They're just following the latest buzzword.