this post was submitted on 02 Nov 2023
1294 points (98.4% liked)

Programmer Humor

32410 readers
1 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 6 years ago
MODERATORS
 
(page 2) 7 comments
sorted by: hot top controversial new old
[–] jbrains@sh.itjust.works 0 points 2 years ago* (last edited 2 years ago) (1 children)

This seems to happen quite often when programmers try to save time when writing tests, instead of writing very simple tests and allowing the duplication to accumulate before removing it. I understand how they feel: they see the pattern and want to skip the boring parts.

No worries. If you skip the boring parts, then much of the time you'll be less bored, but sometimes this will happen. If you want to avoid this, then you'll have to accept some boredom then refactor the tests later. Maybe never, if your pattern ends up with only two or three instances. If you want to know which path is shorter before you start, then so would I. I can sometimes guess correctly. I mostly never know, because I pick one path and stick with it, so I can never compare.

This also tends to happen when the code they're testing has painful hardwired dependencies on expensive external resources. The "bug" in the test is a symptom of the design of the production code. Yay! You learned something! Time to roll up your sleeves and start breaking things apart... assuming that you need to change it at all. Worst case, leave a warning for the next person.

If you'd like a simple rule to follow, here's one: no branching in your tests. If you think you want a branch, then split the tests into two or more tests, then write them individually, then maybe refactor to remove the duplication. It's not a perfect rule, but it'll take you far....

[–] ChickenLadyLovesLife@lemmy.world 0 points 2 years ago (1 children)

the code they’re testing has painful hardwired dependencies on expensive external resources

I've told this story elsewhere, but I had a coworker who wrote an app to remote-control a baseball-throwing machine from a PDA (running WinCE). These machines cost upwards of $50K so he only very rarely had physical access to one. He loved to write tests, which did him no good when his code fired a 125 mph knuckleball a foot over a 10-year-old kid's head. This resulted in the only occasion in my career when I had to physically restrain a client from punching a colleague.

[–] jbrains@sh.itjust.works 0 points 2 years ago (1 children)

Wow. I love that story and I'm glad nobody was hurt.

I wonder whether that happened as a result of unexpected behavior by the pitching machine or an incorrect assumption about the pitching machine in that coworker's tests.

I find this story compelling because it illustrates the points about managing risk and the limits of testing, but it doesn't sound like the typical story that's obviously hyperbole and could never happen to me.

Thank you for sharing it.

load more comments (1 replies)
[–] steeznson@lemmy.world -2 points 2 years ago

ChatGPT go brrrrrr

[–] toastal@lemmy.ml -4 points 2 years ago (7 children)

If you use your type system to make invalid states impossible to represent & your functions are pure, there less—maybe nothing—to test, which will save you from this scenario.

load more comments (7 replies)
load more comments
view more: ‹ prev next ›