* * * * * To unit test or not to unit test, that is the question > There are two parts of your code. Code that can be unit tested and code > that can't be unit tested. > > Code that can't be unit tested is simple. Any code that has to touch IO > (Input/Output) can't be unit tested. Period. Any code that doesn't touch IO > can be unit tested. It's that simple. > > … > > Keep ALL IO segregated from the rest of your code. Keep IO functions and > methods super small. Do not inject IO polluted objects into other parts of > your code. > “Nothing should ever be mocked. Period. If you don't agree you likely don't under... | Hacker News [1]” In hindsight, this is obvious. The issue I have with unit testing projects like “Project: Lumbergh [2],” “Project: Sippy-Cup [3]” or “Project: Cleese [4]” is that they're nearly all IO with very little logic (with the caveat that “Project: Lumbergh” implements all the business logic interspaced with IO). With that said, even though the author also stated not to mock at all, I do. We have a few network services that “Project: Lumbergh” relies upon, and I have written my own versions of those services that basically respond with a canned answer for a particular query. It was easy since the services speak a common protocol (DNS (Domain Name System) in this case) and I don't have to implement the logic of those services to determine the answer. I also decided to implement a new regression test and keep the one I have working [5] as a separate test. This way, it'll be easier to implement tests like “data source B replies, data source A times out.” I'm also keeping each test in its own file, so adding new ones should be way easier and hopefully, we won't end up with another 16,000 tests [6]. [1] https://news.ycombinator.com/item?id=27733397 [2] gopher://gopher.conman.org/0Phlog:2018/09/11.2 [3] gopher://gopher.conman.org/0Phlog:2014/03/05.1 [4] gopher://gopher.conman.org/0Phlog:2018/09/11.2 [5] gopher://gopher.conman.org/0Phlog:2021/07/01.1 [6] gopher://gopher.conman.org/0Phlog:2021/06/10.2 --- Discussions about this page Re: To unit test or not to unit test, that is the question [ 2021-07-08 ] gemini://marginalia.nu/log/02-re-tests.gmi Email Sean Conner at sean@conman.org .