the*_*sdj 5 unit-testing legacy-code visual-c++
我有一个Visual Studio 2005 C++项目,它是一个控制台应用程序.
我想开始在测试工具下获取一些代码,但我遇到了一些我不知道如何最好地处理的问题.
我不希望我的大多数测试代码最终都在生产中的普通.exe中,所以我认为最好为我的测试创建一个单独的项目.第一个问题,这个新项目将如何调用其余的代码?我是否应该使用单个入口点将遗留代码设为.lib或.dll,并创建一个单独的项目来调用遗留代码的主要内容?
我是否应该把所有测试放在完全不#ifdef TESTING使代码不会出现在我的生产.exe 文件中的丑陋黑客?如果是这样,我应该如何有条件地加载我的测试框架?使用单独的属性配置进行测试?
我基本上正在寻找有关如何在Visual C++中获取遗留.exe项目的测试工具的任何建议
首先,我强烈推荐Michael Feather的书"有效地使用遗留代码".这就是如何将自动单元测试添加到没有测试的遗留应用程序.如果您想知道"我如何开始测试这堆代码",那么这本书适合您.
Michael也是CppUnit的作者,CppUnit是一个类似于开源NUnit的C++代码测试框架.你可以在这里找到它:http: //sourceforge.net/projects/cppunit/.
添加测试的一种快捷方法是在解决方案中添加UnitTest配置.此配置将编译您的代码,但不是将其链接到您的main.CPP,而是从构建中排除main.cpp并包含UnitTestMain.cpp,您可以在其中执行调用以执行单元测试.很久以前我们开始这样,当时我们不知道更好.您最终会花费大量时间,包括并将所有各种testMyCode.cpp模块排除在各种配置之外,并且在一段时间后会变得很累.我们发现开发人员不太喜欢这种方法.
更好的方法是将单元测试项目添加到您的解决方案中,并依赖于您的实际项目.如果项目名为Foo.vcproj,则将其命名为Foo_test.vcproj.这个项目只包含你的测试代码,#includes你的Foo标题,它链接到你编译的fooCode.obj模块.添加一个调用来执行Foo_test.exe作为Foo_test构建的构建后步骤,并在构建期间自动运行单元测试.如果任何单元测试失败,则构建失败.如果您在构建服务器上配置了gated-check-ins,则没有人可以检查破坏现有测试的更改.