MXUnit and Me
If you've been keeping up with my blog over the last couple months, then you already know that I've been experimenting with test driven development. I love the work flow, the way it makes me view my code, and the peace of mind...I just don't know that it will pay off in my work environment. Hence the experimentation.
Most of my TDD dabbling up to this point has been done in Ruby. I've finally gotten around to messing around with some of the major ColdFusion testing frameworks: cfunit, cfcUnit and finally MXUnit.
After doing small projects with each of them, I've finally decided to settle down with MXUnit. It's got decent docs, a nice work around for private methods, I dig the web interface, the eclipse plug-in is great and creating my own stubs for the generator was a snap!
In short: Two thumbs up!
Here's my test. I'm still really new to this sort of thing, so I'd love feedback should you feel so inclined:
function Setup() { this.cfc = CreateObject( "component" , "BaseObject" ); this.cfc = this.cfc.init(); makePublic( this.cfc, "SetInstance" ); makePublic( this.cfc, "Set" ); makePublic( this.cfc, "Has" ); makePublic( this.cfc, "Get" ); makePublic( this.cfc, "OnMissingMethod" ); } function TestSetInstance() { var value = "a"; AssertEquals( value, this.cfc.SetInstance( value ) ); value = StructNew(); AssertEquals( value, this.cfc.SetInstance( value ) ); } function TestGetInstance() { var value = "a"; this.cfc.SetInstance( value ); AssertEquals( value, this.cfc.GetInstance() ); value = "b"; this.cfc.SetInstance( value ); AssertEquals( value, this.cfc.GetInstance() ); } function Testinit() { var value = "a"; this.cfc = this.cfc.init( value ); AssertEquals( value, this.cfc.GetInstance() ); this.cfc = this.cfc.init(); AssertEquals( StructNew(), this.cfc.GetInstance() ); } function TestSet() { var field = "a"; var value = "1"; AssertEquals( value, this.cfc.Set( field, value ) ); field = "w"; value = "2"; AssertEquals( value, this.cfc.Set( field, value ) ); } function TestHas() { var field = "a"; var value = "1"; AssertEquals( false, this.cfc.Has( field ) ); this.cfc.Set( field, value ); AssertEquals( true, this.cfc.Has( field ) ); field = "w"; value = "2"; AssertEquals( false, this.cfc.Has( field ) ); } function TestGet() { var field = "a"; var value = "1"; this.cfc.Set( field, value ); AssertEquals( value, this.cfc.Get( field ) ); field = "w"; value = "2"; this.cfc.Set( field, value ); AssertEquals( value, this.cfc.Get( field ) ); } function OnMissingMethod() { var value = "a"; AssertEquals( value, this.cfc.SetSomething( value ) ); AssertEquals( value, this.cfc.GetSomething() ); }
Click to download the component I'm testing and the file above. Now.
Ruby Line Formatting
I wrote a little utility to turn something like this
this=that, something_else="something else entirely"
Into the much easier to read
this = that, something_else = "something else entirely"
I use it in conjunction with my clipboard utility so I can just copy, run, paste. I mostly use this when I'm working with ColdFusion, so it also works for those pesky cfsets.
Usage: (After copying your target text to your clipboard)
ruby clipboard_format_set.rb
PS: I'd love to set some of my scripts up as Eclipse shortcuts so I've been toying with the idea of writing an Eclipse plug-in to act as a proxy. I realize you can set up and run "External Tools", but I have yet to see a way to bind a key. I'd like the plug-in to take care of the "pasting" to save me that extra ctrl-v. Maybe this would make a good New Years Project?
Ganymede JSEclipse Alternatives
I've been having memory issues since setting up JSEclipse on eclipse. I tried googling around first but had a hard time finding any plugins that supported Ganymede.
Once again, stackoverflow came to my rescue by suggesting (free for non-commercial use) Spket and while I haven't used it extensively yet it's been working great so far!
CFEclipse/Ganymede Line Number Problem
My tray line numbers weren't showing up in CFEclipse since upgrading to the Ganymede version of eclipse. My preferences were set correctly. I did a bit of googling but I didn't actually find the solution until a few links down, so I thought I'd share the link love!
1. In directory
[workspace]/.metadata/.plugins/.org.eclipse.core.runtime/.settings/
2. Edit (or create) a text file called
.org.cfeclipse.cfml.pref
3. Add the following line:
lineNumberRuler=true
4. Restart Eclipse




























