loading...
Cover image for Why unit test culture is broken

Why unit test culture is broken

francisluz profile image Francis Luz ・2 min read

Write unit tests should be as fun as writing your feature code, no matter which language you're using, it's all code at the end of the day.

How it can be improved

Sending the right message is key in my point of view to improve your unit test culture, you don't write unit tests because of the most advanced framework or the best methodology out there.

They exist as a tool to help you to achieve the goals, which is to have a stable, reliable and documented codebase.

How the tools help

The framework will help you to mock calls to external sources that sometimes are 3rd party libraries, that we may don't need wanna include in your test cases.

The methodology let's say TDD(Test-Driven Development) is a really helpful one, but I don't think that it's the only way of doing it, depends on your project, if there's legacy code, the timing of task and so on. You may find yourself writing together or at the end of your feature code.

Let's have a bit of fun

Just to have some code here, and if you're at the beginning of your developer journey let's see how a simple test looks like in python.

A python class that prints the greetings message as ASCII art and return the base string.

from art import *

class HelloClass:

    def __init__(self):
        self.HELLO_MSG = "Hello world, "

    def greetings(self, name):
        msg = f"{self.HELLO_MSG}{name}"
        text_art = text2art(msg)
        print(text_art)
        return msg

Then its unit test will be like this one.

import unittest
from python_class import HelloClass

class TestHelloClass(unittest.TestCase):

    def test_greetings(self):
        hello_class = HelloClass()
        self.assertEqual(hello_class.greetings('developer'), 'Hello world, developer')

Conclusion

Make sure that you plan the right time for your task, a unit test can be sometimes 40% of it, adapt to your project's needs and if the culture is broken, include it step-by-step.

It's not easy to unit test a whole codebase that hasn't been planned to have it before. That's my main point from the title, the unit test culture could be broken for a variate of reasons, but there's always a room for improvements.

Hope you enjoy it, that's my personal option about it and based on my experience.

Posted on by:

Discussion

markdown guide
 

You need to consider the problems you're trying to solve with unit tests.

These may be:

  1. Documentation in the form of examples.
  2. Defense against regression.
  3. Evidence that the code functions correctly.
  4. Something else.

Once you understand what problem you're trying to solve, you can try to figure out how well unit testing achieves these for you, or if there a better alternatives.

But if you don't know why you're doing unit testing, except that TDD is good, then you won't be able to make a reasoned assessment, since your position will be ideological.

So, I suggest focusing on the actual problems rather than on a particular approach.

 

Thanks for enriching the discussion, completely valid points. I wrote this more because of past experiences and talks with friends. Unfortunately, some projects nowadays still don't have a good unit test base. I'm lucky enough to have it working quite well in my projects.

 

Writing tests early helps a ton. It doesn't have to follow TDD to a T, but often we are writing code, then checking the output of a bunch of things. Unit Testing is an amazing tool to help speed up this process and give us confidence in future releases.

Stop manually checking things and just write a test already!

 

I guess it's broken because there was a rushed sprint and someone forgot to update test cases

 

In my experience this is one of the biggest causes for tests not getting written. Rushed feature pushes. So what gets left out? Tests

 

Or it's not engrained into team culture.

 

Couldn't agree more ;)

 

I find writing tests to be quite enjoyable, mostly unit tests because of the fast feedback and the lack of dependencies I have to mess with. I use unit tests mostly for checking things work, being sure on edge cases and documentation. The thing that ruins the fun of writing tests is TDD, so I write tests after the code and that works well for me.

Having too much reliance on unit tests is the pitfall here, they're usually brittle and make refactoring more expensive, which will often be mocks being wrong after the change.

 

So... why is unit test culture broken?

 

Thanks Ben, well in my point of view, there're a number of things... to point out a few I would say:

  • Unit test is not part of you development process
  • Rushed sprints with poor test cases
  • "Clients don't pay for it" I guess this is more company/team culture

Those are some that I can tell, make sense?

 

I guess you're mostly saying that it's a problem because people don't do them? I thought from the title you meant that people were doing unit tests but something was wrong with the way they were done.

Wow, got it... yes I meant to say more about the culture of doing it itself.

 

Great man.

It’s about culture