Skip to main content

How I finally started writing unit tests

I'd like to talk about why it seemed so hard to get started and how I finally got past it.

I've done a lot of reading and video watching on the subject of unit testing over the last 2 years or so.  Mostly what I was getting out of it at first was, "You should be writing unit tests for all of your code.  If you aren't doing it you are a poor developer and a horrible person."  I didn't want to be either of those things so I thought I should probably start right away.



I tried several times to start, but I kept running into road blocks.  I knew from what I had watched and read that I should be able to break my code into small functions and test everything independently.  I should be able to run all my tests without actually interacting with the database or sending emails or talking to external services.  The more I looked around at my code though, the more it seemed like that was all the code did.  How could I test anything if all I was doing was interacting with external systems?

Eventually I decided to just start anyway even though it wouldn't be perfect and I would be doing actual database activity in my tests.  I couldn't see any way around it at the time, so that is where I started.  The first tests that I wrote were for a cfc that we use to access the database.  It is a general purpose object that we extend for each table in the database.  It is used all over our system though so it seemed like important code to have unit tests for.  It turned out to be a good place to start.  Because it is responsible for most of the database activity in our newer code I have been able to use that fact to remove almost all the database interaction from my tests.  I'll get into more detail about that in the next article.

I am still getting started.  I only have a couple hundred tests so far for our whole system.  I really like having them though.  Even having those few tests has allowed me to make changes to the code that I never would have made if I didn't have the tests.  It has also allowed me to make the changes necessary to remove most of the database interaction from my tests.

I'm going to stop here for now.  In the next unit testing post I will show some code and get into some more detail about how I have made changes to make unit testing easier and remove most of the external interaction that happens while testing.

Comments

Popular posts from this blog

Getting Hidden App Data From Your Google Drive

Some Android applications use space on your Google Drive to store data.  You can't see this data by browsing drive the normal way.  You can get access to it if you get the access token from the app and do a few other things.

I use an app to keep some notes and other things.  They require getting the paid version of the app to backup your data.  I wanted to see if I could get it myself without paying for the app.  I found out how to do this from this Stackoverflow post http://stackoverflow.com/questions/22832104/see-hidden-app-data-in-google-drive.  The example there uses php. Since I have been learning Python recently, I decided to see if I could do the same thing with Python.

 There is a pretty good explanation of why you need to go through all the steps you need to go through to get your data in the accepted answer for that post, so I won't go into too much detail about that here.


My First Memories of Coding

The first time I remember writing code was in grade school in the computer lab.  We were learning Basic.  I'm not sure how old I was, but it would have been sometime in the late '80s or early '90s.  I remember they had us write a program that would take some numbers from the user and print out the average.  I had to ask how to do division. I had only seen it with the standard division symbol in math class, not the forward slash.  Soon after that I was able to get Basic on my home PC.  Actually I think it was included in MS-DOS.

At school and in the beginning at home I was using Basic where you had to use line numbers to write your code.  Then to edit a line you had to retype that line with the number.  Soon after that I was able to get QBasic and a book to help me get started.


Python control of Broadlink RM2 wifi remote

I recently got a Broadlink wifi remote.  I have been playing around trying to send commands to it with python.  I found code on github that does most of what I need.  It looks like the device itself doesn't learn any remote codes.  It is all in the app.  The code I found can send codes to the device and get codes from learning mode. I have a bunch of buttons programmed in the app already.  I wanted to see if I could get those codes.  I think I got them today.  The app, called eControls, allows you to backup your setup.  Today I was able to get my backup file from their backup site. Tomorrow I will try to use the codes from the backup.