Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I prefer to test everything. The parts you don't test are the parts that break.

For example, here's a case where I incremented the wrong metric:

https://github.com/jrockway/alertmanager-status/commit/fccae...

I noticed the bug when I went to look at a dashboard with that metric on it, and noticed it had the wrong name. If go's Prometheus library had an easy way to run "metric.CurrentValue()", I would have tested it... but it didn't, so I didn't. And then had to patch it, release it, and update all my servers. Writing the test (with that API) would have taken less than a second. Finding the bug in production and fixing it took an hour.

(That codebase has 100% line coverage, but of course, I know that 100% test coverage is a meaningless metric. That the code ran is a prerequisite to the program behaving correctly, but it also has to do the right thing.)



> If go's Prometheus library had an easy way to run "metric.CurrentValue()"...

A small tip for the future: https://pkg.go.dev/github.com/prometheus/client_golang/prome....


Thanks! I've seen that before, but didn't realize that ToFloat64() was what I was looking for.


Arguably you should be testing behaviour rather than getters and setters. If a codepath requires a name formatted correctly, then that forms the basis of a test and an assertion. Otherwise you're introducing fragility by coupling your 'under the hood' stuff with your 'API' (so to speak).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: