Capture stdout/stderr/exit code, and replace stdin of your main function.
Why?
Against the best practice, I often prefer large, end-to-end (E2E) tests.
Because:
E2E tests can directly test your users’ requirement.
E2E tests can detect bugs caused by misassumption of external components
Which happenes relatively more often than the others, according to my experience.
I often write small programs where E2E tests are sufficient.
This library main-tester provides utility functions for E2E testing of your CLI applications.
With main-tester, You can test your apps with arbitrary stdin data, check their output and exit code.