创建VS2015的WIN32控制台程序,创建Fibonacci类,构造析构函数默认即可,声明递归与非递归计算方法;Fibonacci.h文件具体实现:
选择全部运行,就可以看到运行的结果:
详细实现的方法在Fibonacci.cpp中:两个递归计算方法实现如下:
unsigned int Fibonacci::GetFibonacciRecursive(unsigned int Num)
{
if (0 == Num)
{
return 0;
}
if (1 == Num)
{
return 1;
}
return GetFibonacciRecursive(Num - 1) + GetFibonacciRecursive(Num - 2);
}
unsigned int Fibonacci::GetFibonacciNonRecursive(unsigned int Num)
{
unsigned int CurFibonacciNum = 0;
unsigned int PrevFibonacciNum = 1;
unsigned int PrevPrevFibonacciNum = 0;
if (0 == Num)
{
return 0;
}
if (1 == Num)
{
return 1;
}
for (unsigned int i = 2; i <= Num; i++)
{
CurFibonacciNum = PrevFibonacciNum + PrevPrevFibonacciNum;
PrevPrevFibonacciNum = PrevFibonacciNum;
PrevFibonacciNum = CurFibonacciNum;
}
return CurFibonacciNum;
}
因为是使用UnitTest测试代码,所以这里不创建main函数,而是将该类编译成lib方式,右击项目属性,将配置类型修改为lib:
接下来创建测试项目:右击解决方案-添加-新项目,选择本机单元测试项目:
然后添加引用,将刚才创建fibonacci项目添加进来
编写测试代码,
#include "stdafx.h"
#include "CppUnitTest.h"
#include ".\..\ConsoleApplication3\Fibonacci.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace FabonacciTest
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD_INITIALIZE(SetUp)
{
Logger::WriteMessage("test Initialized!");
}
TEST_METHOD(TestGetFibonacciRecursive)
{
// TODO: 在此输入测试代码
Assert::AreEqual<unsigned int>(0, Fibonacci::GetFibonacciRecursive(0));
Assert::AreEqual<unsigned int>(1, Fibonacci::GetFibonacciRecursive(1));
Assert::AreEqual<unsigned int>(1, Fibonacci::GetFibonacciRecursive(2));
Assert::AreEqual<unsigned int>(2, Fibonacci::GetFibonacciRecursive(3));
Assert::AreEqual<unsigned int>(13, Fibonacci::GetFibonacciRecursive(7));
Assert::AreEqual<unsigned int>(55, Fibonacci::GetFibonacciRecursive(10));
}
TEST_METHOD(TestGetFibonacciNonRecursive)
{
// TODO: 在此输入测试代码
Assert::AreEqual<unsigned int>(0, Fibonacci::GetFibonacciNonRecursive(0));
Assert::AreEqual<unsigned int>(1, Fibonacci::GetFibonacciNonRecursive(1));
Assert::AreEqual<unsigned int>(1, Fibonacci::GetFibonacciNonRecursive(2));
Assert::AreEqual<unsigned int>(2, Fibonacci::GetFibonacciNonRecursive(3));
Assert::AreEqual<unsigned int>(13, Fibonacci::GetFibonacciNonRecursive(7));
Assert::AreEqual<unsigned int>(55, Fibonacci::GetFibonacciNonRecursive(10));
}
TEST_METHOD_CLEANUP(TearDown)
{
Logger::WriteMessage("test completed!");
}
};
}
选择菜单中的测试资源管理器
选择全部运行,就可以看到运行的结果:
也可以选择选择运行未通过的测试用例:
也可以调试选定的测试用例,可以打上断点调试
以上为VS2015提供给C++项目单元测试的方案,功能还是很强大的。