• I really hate the projects I work on where they’ve overtested to the point of meaninglessness. Like every single class has a full suite of tests mocking every single dependency and it’s impossible to look at it without breaking 50 test cases.

    Similarly I hate the projects with no tests because I can’t change anything and be sure I’ve not broken some use-case I didn’t think about.

    Much prefer the middle ground with modular, loosely coupled code and just enough tests to cover all the use cases without needing to mock every single little thing. It should be possible to refactor without breaking tests.

    • My favorite tests are the tests that check what the function in question does when it’s passed null/wrong type/whatever in a statically typed language.

      The compiler’s there to make sure you don’t do that. Unless it’s something that can actually happen, I don’t think there’s much value writing dozens of these tests for each source file. By all means, test edge cases, but if the edge case violates the contract of the function being tested then I think it’s safe to say the caller is the problem, not the implementation.