Key to Successful Unit Testing – How Developers Test Their Own Code?

Purpose of the Article

Black box testers don’t care about unit testing. Their main goal is to validate the application against the requirements without going into the implementation details. But as a curiosity or out of the box thinking, have you ever wondered how developers test their own code? What method do they use to test before releasing code for testing? How is dev-testing important in an agile process? The answer to all this is unit testing. I want to educate you on the importance of unit testing so that development and testing teams can work more collaboratively to design, test and release an excellent application.

Who knows in the future some of you may even switch to white box testing and use these code validation and improvement techniques!

What You Will Learn:

What is Unit Testing?

Unit testing is not a new concept. It’s been there since the early days of the programming. Usually, developers and sometimes white box testers write unit

tests to improve code quality by verifying each and every unit of the code used to implement functional requirements (aka test driven development TDD or test-first development).

Most of us might know the classic definition of unit testing –

“Unit testing is the method of verifying the smallest piece of testable code against its purpose.” If the purpose or requirement failed then the unit test has failed.

In simple words, unit testing means – writing a piece of code (unit test) to verify the code (unit) written for implementing requirements.

Unit testing in SDLC:

Importance of Writing Unit Tests

Unit testing is used to design robust software components that help maintain code and eliminate the issues in code units. We all know the importance of finding and fixing the defects in the early stage of software development cycle. Unit testing serves the same purpose. Unit testing is an integral part of the agile software development process. When nightly build run unit test suite should run and report should be generated. If any of the unit tests have failed then QA team should not accept that build for verification. If we set this as a standard process, many defects would be caught in the early development cycle, saving much testing time.

I know many developers hate to write unit tests. They either ignore or write bad unit test cases due to tight scheduled or lack of seriousness (yea they write empty unit tests, so 100% of them pass successfully ;-)). It’s important to write good unit tests or doesn’t write them at all. It’s even more important to provide sufficient time and supportive environment for real benefits.

Benefits:

Unit Testing Cycle:



[Image credit Typemock.com]

What Makes a Good Unit Test?

Well, I’m not the right person to tell what makes a good unit test, but based on my observations on various projects I can definitely tell the characteristics of a good unit test. The bad unit test does not add value to the project. Instead, project cost increases significantly writing and managing bad unit tests.

How to write good unit tests?

Unit Testing Frameworks

Unit testing frameworks are mostly used to help write unit tests quickly and easily. Most of the programming languages do not support unit testing with the inbuilt compiler. Third party open source and commercial tools can be used to make unit testing even more fun.

List of popular unit testing tools for different programming languages:

  1. Java framework – JUnit
  2. PHP framework – PHPUnit
  3. C++ frameworks – UnitTest++ and Google C++
  4. .NET framework – NUnit
  5. Python framework – py.test

Unit Test Example

A video tutorial explaining how to write the unit test using PHPUnit testing framework:

 

Misconceptions and Truths

While unit testing offers many advantages, there are also limitations involved with using it. Rigorous discipline and consistency are required throughout the software development process to overcome limitations and get the intended benefits.

Your Comments are Most Welcomed!

As a black box tester, what are your observations about unit testing on your team? Does anyone have a better idea for successful unit testing?