Here's another bit of heresy: testing isn't everything. Very fine-grained test suites frequently break when the structure of code under test changes even when the new code still does its job. In the limit, it's the equivalent of just breaking if SHA256(old_code) != SHA256(new_code).
Very short functions, I've found, encourage this kind of over-testing and just add friction to code changes without actually improving system reliability.
You're better off testing at major functional boundaries, and if you do that, the length of functions matters less than the interface major modules provide to each other.
> You're better off testing at major functional boundaries, and if you do that, the length of functions matters less than the interface major modules provide to each other.
Otherwise known as integration testing, which is far more useful than unit testing because bugs, especially regression bugs, more often occur in the system, than in specific functions.
You can have as many unit tests as you want, but until you have integration test, you have zero coverage for the really complex part of your code.