Home =>
Articles =>
Test First Challenge: Getting Started
Test First Challenge: Getting Started
Charlie Poole
January, 2002
Bill Wake created the
Test-first Challenge
as a way for people to practice
test-first.
He provided a set of tests that drive the development of a simple spreadsheet
application. A number of people who frequent the extreme programming list wrote
code in response to Bill's tests, including me.
I'm using C++, so first off I had to spend some time initially getting CppUnit
to work correctly on my system. It's a bit annoying how the assertEquals requires
two objects of the same type. At least in VC 6.0, you can't use string constants
to the comparison with string objects. I think it's because assertEquals is a
template, and VC is not doing the matching 100% correctly. For now, I'm not trying
to fix it, so I have to use String("Some string") in various places.
Even though I know Bill regrets using only one cell for all the tests, I didn't
deal with it in part 1. My initial version for part 1 looks pretty
much like everyone else's.
class Sheet
{
public:
Sheet();
virtual ~Sheet();
String get( const String& cellName );
String getLiteral( const String& cellName );
void put( const String& cellName, const String& cellValue );
private:
String m_content;
};
String Sheet::get( const String & )
{
if ( m_content.isNumeric() )
return m_content.trim();
else
return m_content;
}
String Sheet::getLiteral( const String& cellName )
{
return m_content
}
void Sheet::put( const String & cellName, const String& cellValue )
{
m_content = cellValue;
}
The isNumeric and trim functions were originally part of Sheet with slightly
different names. All the functions used std::string directly. After all the
tests passed, I decided to refactor by deriving a String class from std::string
and making isNumeric and trim members. I confess that I didn't write tests
for the String class but I think the existing tests cover it well enough.
Things get a bit more interesting in Part2.
|