Click here to Skip to main content
13,254,154 members (60,804 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

16.2K views
4 bookmarked
Posted 7 Jul 2015

Testable Code vs Clean Code

, 7 Jul 2015
Rate this:
Please Sign up or sign in to vote.
Testable code versus clean code

clean code

I wrote my first blog article 1.5 years ago, and it was about how TDD made me a happy developer. In that article, I talked about how TDD helps me write clean code, refactor code without breaking it, decrease debugging time and improve my career.

I’m still a Test Driven Developer, but when I wrote the first post, I thought that clean code is testable code, and vice versa. However, I don’t think anymore that these two are the same thing. In my first days of TDD, my goal was to test everything so I could have a high test coverage, now I know this is wrong, but back then, I was really happy to see that my code coverage was over 95%. The problem is that in order to reach a high coverage like this, you have to make sure everything is testable, so I ended up creating interfaces for almost every class that I used, in order to be able to test the code.

Let me give you a better example of what I’m trying to say. If you remember, I made a few articles about doing TDD with Windows Phone, and I said that in the test project I can’t reference any Windows Phone libraries in order to be able to test it, because my test project was a simple class library, not a Windows Phone Test Project. If you have a method that calls a phone number, you would normally do something like this:

public void CallUser(User user)
{
    PhoneCallTask phoneCallTask = new PhoneCallTask();

    phoneCallTask.PhoneNumber = user.PhoneNumber;
    phoneCallTask.DisplayName = user.FullName;

    phoneCallTask.Show();
}

But I couldn’t do it because I can’t test the method, so I have to create a wrapper for PhoneCallTask and add it in my ViewModel through constructor injection.

private readonly IPhoneDialer _phoneDialer;
class MyViewModel
{
    private readonly IPhoneDialer _phoneDialer;

    public MyViewModel(IPhoneDialer phoneDialer)
    {
       _phoneDialer = phoneDialer;
    }

    public void CallUser(User user)
    {
       _phoneDialer.Call(user.PhoneNumber, user.FullName);
    }
}

The code is shorter, but it’s a lot of extra work that doesn’t add any real benefit. In my example, creating a wrapper for PhoneCallTask could be useful in the future, because I’m not dependent on the Windows Phone SDK anymore. If they decide to change the way of calling someone, I just have to change the implementation, not the interface, but the chances for this to happen are very slim, so if you’re not going to need it now, don’t do it.

Clean code has its benefits, it will make your code easier to understand for someone else, and it will make it easier to change and refactor. But testable code will make your product more reliable, so you shouldn’t chose between these two, but find a balance between them. If you want only clean code, I say you should write the tests around the code, and if the tests are more important for you, then you should focus on making it testable. If there’s one thing that I learned as a programmer is that there’s no “42” in software development. Stop thinking that all the code should be clean or that all the code should be testable, there’s no such thing.

The post Testable code vs clean code appeared first on Bogdan Bujdea.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Bogdan Bujdea
Software Developer Feel IT
Romania Romania
Hey! I'm Bogdan Bujdea, a software developer from Romania. I started to learn programming since my first year of highschool with C++. During my time in college I tried various languages like Java, C#, Haskell, Javascript, Python, etc. but my favorite remains C#.
I started my career with Thinslices as a Windows 8 developer, but now I work for Feel IT Services as a Windows Phone developer.

You may also be interested in...

Pro

Comments and Discussions

 
GeneralNice concise article, but I think you might have been right first time :0) Pin
OneWinsto9-Jul-15 2:28
memberOneWinsto9-Jul-15 2:28 
GeneralRe: Nice concise article, but I think you might have been right first time :0) Pin
Bogdan Bujdea11-Jul-15 11:23
memberBogdan Bujdea11-Jul-15 11:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.171114.1 | Last Updated 8 Jul 2015
Article Copyright 2015 by Bogdan Bujdea
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid