今天开始读《测试驱动开发实用指南(影印版)》里的例子。打算边读边把里边的例子用C++写一遍。
在《Test-Driven Development-A Practical Guide》书中的影片管理例子中,作者列出了10个User Story:
1) Movie List
2) Movies Can Be Renamed
3) Movies Are Unique
4) Rattings
5) Categories
6) Filter on Category
7) Persistence
8) Sorting
9) Multiple Ratings
10) Reviews
作者将围绕这十个User Story来展开开发。
一、Movie List
需要设计一个影片列表container.
Test 1: 空的列表的size应该为0。
测试代码:
void TestMovieList::testEmptyListSize()
{
m_pMovieList = new MovieList();
CPPUNIT_ASSERT_EQUAL(0, m_pMovieList->Size());
}
编译没通过,写产品代码:
增加一个类MovieList:
class AFX_EXT_CLASS MovieList
{
public:
MovieList();
virtual ~MovieList();
public:
int Size();
};
size()方法:
int MovieList::Size()
{
return 0;
}
编译,测试,通过。
Test 2: 加入一个影片后列表size应该为1.
测试代码:
void TestMovieList::testSizeAfterAddingOne()
{
Movie starWars;
MovieList oneItemList;
oneItemList.Add(&starWars);
CPPUNIT_ASSERT_EQUAL(1, oneItemList.Size());
}
编译没通过,写产品代码.
加入新类Movie
class AFX_EXT_CLASS Movie
{
public:
Movie();
virtual ~Movie();
};
MovieList加入新的方法Add():
void MovieList::Add(Movie* pMovie)
{
m_nNumberOfMovies = 1;
}
同时加入新的数据成员用于保存影片个数:
int m_nNumberOfMovies;
今天先写到这,我们完成的测试如图1:
图1