一、创建测试项目
在解决方案资源管理器,选中解决方案。
右键|添加|新建项目,进入"添加新项目"对话框。
依次选择Visual C++|测试|本机单元测试项目
我们创建一个名为TestStock的单元测试项目,当然,仍然将显示方式改为:显示全部文件。
二、运行测试:
在主菜单,选择测试|窗口|测试资源管理器。运行全部测试:测试项目会编译,由此测试资源管理器将发现向导产生的名为Test1的测试,当然,这个会通过。
三、能够测试Mfc项目中的类吗?
多数文章介绍的是针对Dll项目的测试。我们能否测试Mfc应用项目中的类呢?答案是可以,测试项目需要链接Mfc应用项目中的相应的obj文件。步骤如下:
1、在Stock项目中创建要测试的类
我们创建一个名为Demo的类,这会增加对应的头文件和cpp文件。然后编译Stock项目
2、测试项目中设置附加依赖库目录、附加依赖项、包含目录
在测试项目的属性页中,配置属性|链接器|常规,然后再附加库目录中加入:
$(SolutionDir)Stock\$(Configuration)
这个使用了两个宏,当前的配置是Debug,那么$(SolutionDir)表示解决方案的目录,$(SolutionDir)Stock表示解决方案下的Stock目录,而$(Configuration)在debug配置中的值为Debug。这实际上是说明,如何找到demo.obj
然后在链接器|输入中,编辑附加依赖项,加入demo.obj,注意不要带路径,只是文件名,上一步骤已经列出了去哪个文件夹下寻找。
当然,要使用demo类,我们还需要#include "demo.h",因此我们要设置,在何处找到该头文件:在测试项目的属性页中,配置属性|C/C++|常规,编辑"附加包含目录",加入$(SolutionDir)Stock,这是Demo.h所在的文件夹。
3、在测试项目中创建Demo类的实例
我们简单的在向导生成的unittest1文件中
加入:#include "Demo.h"
然后在TEST_METHOD(TestMethod1)函数里,简单的创建实例
Demo demo;
然后编译测试项目,遇到了两个错误:C运行库问题和未链接预编译对象问题,现在知道上一篇文章的出处了吧?
4、C运行库的问题
我们创建Mfc应用的时候,是采用静态链接Mfc的方式,因此,使用的是/MTD方式静态链接C运行库。单元测试项目,默认使用/MDD方式动态链接C运行库。
将单元测试项目的运行库设置,修改为/MTD即可。
在测试项目的属性页,配置属性|C/C++|代码生成:运行库设置修改为多线程调试 (/MTd)
5、未链接预编译对象问题
这个,是由于demo.cpp中include了stdafx.h,预编译头文件。我们如同加入demo.obj一般,加入stdafx.obj即可。
四、我们实际写一个测试:
1、在Stock项目中的类视图,为demo类增加一个Add方法,做两个整数的加法
头文件里增加了Add方法,Cpp文件也增加了,不过是返回0,没做任何事情。显然,我们还没有完成任务。
2、在单元测试中,测试加的结果对不对:
TEST_METHOD(TestMethod1) { Demo demo; Assert::AreEqual(5, demo.Add(2, 3)); } |