You know that you should write unit tests for your code. You know that you should update your tests once you change your code. But you also want to write code to develop new features instead of writing code to test existing features, just to potentially find some bugs, which cost even more time fixing. And even if you create some tests, they will be outdated once you change the smallest thing in the underlying code. Just think of all the effort for keeping every unit test up to date! To sum up, the effort that you put into your unit tests simply does not pay off.If you think like this, let me show in this article what you should change to finally make unit testing worth your time! I mean in the end, it’s quite simple – you want to be more efficient. Meaning that you want to minimize the time that you have to put into testing, and maximize the benefits your receive from each unit test. Let’s see how you can achieve these two things.
1Minmize the effort using the right tools and techniques Most unit tests are actually unnecessary. Usually, you can achieve better results (cover more critical parts of your code), with at least half as many unit tests as you have right now. How? Simply apply the right methods when creating unit tests. They are called equivalence class partitioning and boundary value analysis, and you can learn them here: 2 methods that help you save 60 % of your effort in Unit Testing Even if you reduce your unit tests to the ones that are actually relevant, writing the respective code can still be annoying. Writing unit test code in a way that is understandeable for others, and keeps the adaptation effort for continuously updating your tests at a minimum, is however another level. Lucky you, there are clean code principles that guide you in how to do that (Clean Unit-Testing, What it takes to make good Unit-Tests), and I’ve also created a checklist that helps you write effective unit test code in a step-by-step manner: The Ultimate Checklist for Better Unit Testing
If you want to further minimize the effort you need to test your code, you can even use tool support to avoid having to remember all these best practices and clean code principles. Standard unit testing frameworks (such as NUnit, or JUnit) only offer support for standard testing features (like assertions). High-level testing tools however take over the code writing for you. They offer an interface that is optimized to help you define the right test cases, and then automatically generate high-quality code from this definition. Read more about this here: Forget Writing Unit Tests. Try This Instead. or here: 4 Smart Strategies for Agile Unit Testing
2Maximize the impact of each unit test To increase the impact of each unit test, you have to reuse it in as many ways as possible. So, go beyond just executing your code to find bugs (which are not there anyways, because you’re a kickass developer that doesn’t create bugs), and e.g. use them to structure your thinking before implementing functionality you don’t even need (read more about this here: 1 Simple Rule To Better Unit Tests). But also while executing your unit tests, you can gain a lot from them, beyond finding bugs. I’ve written on this in more detail in this article already: 5 things you can learn from executing your test cases
So, are you convinced? Do you have a plan on how to get more efficient in your unit testing? Do you think that creating unit tests can finally pay off? Let me know in the comments section below!
When you visit any web site, it may store or retrieve information on your browser, mostly in the form of cookies. Control your personal Cookie Services here.