Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 将单元测试添加到现有的visualc++;项目 我正在研究一个Visual C++项目,它已经存在了10年。我们刚刚决定开始添加单元测试。我们小组正在讨论两种基本方法,以允许针对给定类编写单元测试。要么我们可以派生一个类并在派生类中添加单元测试所需的内容,要么我们可以创建一个基类并将所需内容移动到基类中,从中派生出现有的类_Unit Testing_Visual C++ - Fatal编程技术网

Unit testing 将单元测试添加到现有的visualc++;项目 我正在研究一个Visual C++项目,它已经存在了10年。我们刚刚决定开始添加单元测试。我们小组正在讨论两种基本方法,以允许针对给定类编写单元测试。要么我们可以派生一个类并在派生类中添加单元测试所需的内容,要么我们可以创建一个基类并将所需内容移动到基类中,从中派生出现有的类

Unit testing 将单元测试添加到现有的visualc++;项目 我正在研究一个Visual C++项目,它已经存在了10年。我们刚刚决定开始添加单元测试。我们小组正在讨论两种基本方法,以允许针对给定类编写单元测试。要么我们可以派生一个类并在派生类中添加单元测试所需的内容,要么我们可以创建一个基类并将所需内容移动到基类中,从中派生出现有的类,unit-testing,visual-c++,Unit Testing,Visual C++,选项1: 类别C现有类别 类CDerivedClass:CExistingClass 选项2: 类别CBaseClass类别 类别CExistingClass:CBaseClass 选项1的优点是,它不需要对现有类进行任何更改—单元测试所需的任何内容都严格地为单元类项目添加,并且不向现有库添加任何内容。缺点:当尝试链接时,这是一场彻底的灾难。为了让它为我们的一个库工作,我们必须添加一个单独的构建后步骤来执行库的静态链接版本,并将单个OBJ文件添加到其他依赖项中 选项2的优点是链接不是一个问题-您

选项1:
类别C现有类别
类CDerivedClass:CExistingClass

选项2:
类别CBaseClass类别
类别CExistingClass:CBaseClass

选项1的优点是,它不需要对现有类进行任何更改—单元测试所需的任何内容都严格地为单元类项目添加,并且不向现有库添加任何内容。缺点:当尝试链接时,这是一场彻底的灾难。为了让它为我们的一个库工作,我们必须添加一个单独的构建后步骤来执行库的静态链接版本,并将单个OBJ文件添加到其他依赖项中

选项2的优点是链接不是一个问题-您只选择基类并测试其中的项。缺点是,这意味着修改现有代码,通常会降低软件的可读性(10多年后,软件的可读性已经太低了)。它还打开了多重继承问题的大门,我真的希望避免这种情况


我还没有找到其他人参与决策过程的讨论,我有兴趣看看其他地方的决策,从中吸取教训,或者更好的是,听听我们没有考虑过的选项3。

也许我不完全理解你的问题,您会测试现有代码还是重构现有代码以进行测试


从技术上讲,您不必更改代码,只需测试类的公共接口,如果问题是如何更好地为测试目的解耦,我认为第二选择更好,新基类将是抽象的,但可能我错过了主题

可能我不完全理解您的问题,您会测试现有代码还是重构现有代码以进行测试


从技术上讲,您不必更改代码,只需测试类的公共接口,如果问题是为了测试目的如何更好地解耦,我认为第二种选择更好,新的基类将是抽象的,但也许我错过了主题

我建议将应用程序拆分为具有明确定义的接口的静态库。清晰的界面边界是这里的关键。您可以将静态库直接链接到测试DLL中。考虑每个库有一个测试DLL。

您可以将导入库直接链接到测试DLL中。这样可以方便地访问您的功能进行测试。对于非导入lib,您仍然可以通过GetProcAddress&LoadLibrary&FreeLibrary路径获得在测试中直接调用的DLL导出

或者,如果您有来自EXE building的OBJ文件,请添加生成后操作以将OBJ文件组装到静态库中,然后您可以将其包含在测试项目中

如果事情乱七八糟:拿出可以单独测试的最小代码片段


必须阅读:有效使用遗留代码,作者Michael Feathers,Prentice Hall,2004。

我建议将应用程序拆分为具有明确定义接口的静态库。清晰的界面边界是这里的关键。您可以将静态库直接链接到测试DLL中。考虑每个库有一个测试DLL。

您可以将导入库直接链接到测试DLL中。这样可以方便地访问您的功能进行测试。对于非导入lib,您仍然可以通过GetProcAddress&LoadLibrary&FreeLibrary路径获得在测试中直接调用的DLL导出

或者,如果您有来自EXE building的OBJ文件,请添加生成后操作以将OBJ文件组装到静态库中,然后您可以将其包含在测试项目中

如果事情乱七八糟:拿出可以单独测试的最小代码片段

必须阅读:有效地使用遗留代码,也是由Michael Feathers撰写,Prentice Hall,2004年