Skip to main content

More on getting started with unit testing

In a previous post I talked about how I was finally able to start writing unit tests.  In this post I will discuss how I went from just starting out to where I am now.  This has involved splitting our database access object into two parts, creating an object factory, and a few mock objects.  I think they are mock objects and not stubs, but I may need to read about that a little more before I finish this post.


As much as possible while getting started I have been trying to do TDD (Test Driven Development).  This means I am following the process of writing tests first and then writing code that makes the tests passed.  I did have to make some tests for some existing code before getting started.
As I mentioned in the first post, at work we use a cfc that I wrote to do most of our database interaction.  If you are familiar with active records in Ruby on Rails it is similar to that.  I don't have much experience with rails but I think it is pretty similar anyway.  It doesn't really matter though for the purposes of my unit testing explanation.
Cfcs that extend that one are used in many places in our system and more places use it all the time.  So I decided it was a good object to start writing tests for.  The problem I ran into right away though was that much of what the cfc does is database activity.
We don't use the cfc directly.  It is always extended so I made an object in my tests folder that extends the database cfc.  Then I made a table in our dev database to use for my tests.  Then I had to setup tests for all the existing functions in the cfc.  After that I had a bunch of unit tests that do actual database activity.   I know I'm not supposed to do that, but at the time it was the only way I could get the tests written.
Now that I had tests I was able to make changes without fear of breaking everything.  Over several weeks or months I continued refactoring the code.  Eventually I reduced the number of methods that actually did database activity.  After that I was able to split the database activity into a separate class.
With that done now I was able to create a mock object for the query methods.   I also created an object factory object that allows me to inject the mock database object.  I think I'll stop here and maybe write up a few more details and some conclusions in another post.

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.


Using The Coldfusion XMLValidate Function To Validate User Content

Sometimes you want to allow a limited set of HTML tags in user generated content.  This can be done with the XMLValidate function in Coldfusion as long as the content is valid XHTML.

Several years ago I read an article about escaping form values posted by Ben Nadel on his site www.bennadel.com. Some discussion came up in the comments about allowing a limited set of html tags for paragraphs, bold text, and so on.  I had a need to do this for forum comments on a site that I was working on. This site was written in Coldfusion so I was looking at some of the same options mentioned in Ben's article. I ended up doing something a little different though.

We were using TinyMCE for the forum comments. TinyMCE produces XHTML code so I was able to use Coldfusion's abilities to handle XML to accomplish this task. Using the XMLValidate function and an XML schema that was modified to accept a small list of tags and attributes the comments were correctly limited. Here is the relevant po…

Using IR codes from Broadlink backup file

This is a continuation of yesterdays post about the Broadlink RM2 wifi remote.  I was able to test out using the codes to control my remote today.  They are stored in JSON format in the broadlink backup file.  The backup file is a zip file.  After you extract it there is a folder named SharedData.  There are several files in the folder.  The one that seems to have all the codes is named jsonIrCode.  The data looks like an array of objects, each with a code and some other information.