Today was dominated by work, where I'm a software developer. I work for Insights Learning & Development Ltd., an international training company based in Dundee that specialises in how people work together. I and my colleagues write software that supports the company's training programmes.
Today's achievement was migrating our mock objects (the crash test dummies of software testing) from the NMock 1.0 framework to the alternative Rhino Mocks. We started off using NMock as the "obvious" choice, but now that NMock 2.0 has a significantly different syntax we took that as an opportunity to look at what other frameworks were available.
NMock 2.0 is a definite improvement, looking more like English due to clever chaining of its methods, and it has useful functionality improvements over 1.0 as well. However, when we checked up on a couple of alternatives, we also found ourselves interested in TypeMock, a commercial framework, and Rhino Mocks, a free framework.
We chose Rhino Mocks in part because it has similar syntax and capabilities to NMock 2.0, but mainly because it has better support for refactoring. Refactoring is the process of gradually improving code whenever you touch it, and one common form of refactoring is to rename functions to be more meaningful.
Other mock object frameworks rely on storing function names as strings (text), which are not so easily found in amongst the code by refactoring tools that do the renaming. Rhino Mocks relies on actual calls to the functions, which can be more easily found and kept correct by refactoring tools.
As it's one of our goals to encourage refactoring and make it easy to do, this made Rhino Mocks the immediate favourite. So far we haven't found any killer functionality that would make any of the other options more attractive.
I came home in the usual way - a combination of a lift with a friend and co-worker as far as St. Andrews, and then a bus journey the rest of the way home - and sat down to watch a DVD and eat before returning to my computer to write this entry and carry on working on my out-of-hours project, which is a cut-down Windows Mobile version of our software.
It's nearly finished, which is just as well as it's due to be submitted for "Designed for Windows Mobile" logo testing next month and I'd like to get some of my evenings back! I think I've just cracked the last remaining significant problem, by moving some functionality into an event handler that is invoked later in the program's start-up process than the ones that I'd initially been trying to use.