如果我们现在直接运行这个测试项目,当然是没法编译通过的。因为我们还没有创建Salay类。接下来就是测试驱动开发中的“开发”部分了。为了让刚才创建的测试项目能够编译运行并通过所有的测试,我们需要做的是:
1) 向SalarySys解决方案中新添加一个Visual C++的Win 32静态库项目Salary。我们的开发工作就在这个项目中进行。
2) 在Salay项目中新添加一个类Salary以实现工资计算的功能。为了让测试项目中的测试可以通过,我们先将Salay类简单地实现如下:
class Salary
{
public:
Salary(int nBaseYear) {};
public:
int GetSalary(int nNow)
{
return 1300;
}
};
3) 有了开发项目之后,接下来的工作就是将开发项目和测试项目联系起来,让测试项目对开发项目进行测试。首先,将开发项目目录“$(SolutionDir)\Salary\”添加为测试项目的附加包含目录目录,这样测试项目可以找到Salary类的定义。然后我们还要将开发项目这个静态库链接到测试项目,为了完成这一步,我们需要在项目属性中将解决方案的输出目录“$(OutputPath)”设置为测试项目的附加库目录,然后将静态库Salary.lib设置为测试项目的附加依赖项。
完成这些开发项目的编写以及测试项目的设置之后,我们的测试项目就可以编译通过并运行其中的测试了。
从Visual Studio 2010中测试结果
到这里,我们就完成了测试驱动开发过程的一次完整的迭代,接下来的工作,就是编写更多的测试以覆盖设计中的所有用例,然后运行这些测试使这些测试通过,如果测试暂时无法通过,则对开发代码进行重构实现设计使得所有测试都可以通过。例如,在上面完成第一次开发迭代的基础,我们可以编写更多的测试来覆盖Salary类设计中的所有功能点:
[TestMethod]
void TestCalculationn()
{
std::unique_ptr pClass(new Salary(2003));
int cases[4][2] =
{{2003,1000},{2004,1300},
{2005,1600},{2011,3100}
};
for(int i = 0; i < 4; ++i)
{
Assert::AreEqual(cases[i][1], pClass->GetSalary( cases[i][0]));
}
};
在这里我们使用一个数组cases定义了多个测试用例,然后使用for循环对这些用例逐个进行测试。现在我们运行测试项目中的这些测试当然是没法通过的,所以这些测试就驱动我们去对开发项目中的Salary类进行重构,以使得这些测试可以通过:
class Salary
{
public:
Salary(int nBaseYear)
:m_nBaseYear(nBaseYear)
{};
public:
int GetSalary(int nNow)
{
return 300*(nNow - m_nBaseYear) + 1000;
}
private:
int m_nBaseYear;
};
文章来源于领测软件测试网 https://www.ltesting.net/