Patrick Desjardins Blog
Patrick Desjardins picture from a conference

Unit Tests Simple Method

Posted on: 2016-01-18

Unit tests are something that everyone agree to do, but not a lot write correctly. I found more and more code that has unit tests for the "happy path" and more common scenario while ignoring all other possible cases. Let's take the following small method.

public smallSimpleOneLineMethod (abc: string): boolean { 
  return this.zzz && (this.zzz === abc); 
} 

This method is broken because we specify to return a boolean but it can return null. This is not possible in C#, but in TypeScript since it is converted to JavaScript it is.

This is where Unit Test come to the rescue. We expect that method to return true when abc and zzz is different; false when the same. If zzz is null, we expect to return false. Simple, no need unit test… The problem is that this.zzz if null will remain null in the first part of the && condition, not false. It means that we do : null && (true|false). What does that mean? It means that all the time, if zzz is null that that method return null, not false or true.

This method needs to be refactored to :

public simpleMethod (abc: string): boolean {
   return !!this.zzz && (this.zzz === abc); 
} 

To sum up that post, unit test every conditions, even simple one. It’s not because it works today that it won’t fail tomorrow. Tests all possible routes that your code allows. The simpleMethod has now 4 unit tests that test null from the parameter, from the this variable and with and without the same string variable.