Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
C++ 还有一个单元测试/代码覆盖率问题。我的方法明智吗?_C++_Visual Studio 2008_Unit Testing_Linker - Fatal编程技术网

C++ 还有一个单元测试/代码覆盖率问题。我的方法明智吗?

C++ 还有一个单元测试/代码覆盖率问题。我的方法明智吗?,c++,visual-studio-2008,unit-testing,linker,C++,Visual Studio 2008,Unit Testing,Linker,这是另一个单元测试问题。我正试图从许多地方获取关于如何进行的知识,我想从这里收集的专家中恢复我目前的理解 假设一个项目的所有依赖项(opengl Funkines除外)都是静态链接的(c运行时除外) 我目前的理解是: 可以进行只测试类的公共接口的单元测试,因为最终类是最适合测试的单元。问题可以在有问题的类中找到,而一个过于复杂而无法调试的类,需要对其内部结构进行单元测试,是将其分解的好选择。 这种做法使得从VisualStudio的角度在自己的项目中编写单元测试成为可能 在主项目中安装了代码覆盖

这是另一个单元测试问题。我正试图从许多地方获取关于如何进行的知识,我想从这里收集的专家中恢复我目前的理解

假设一个项目的所有依赖项(opengl Funkines除外)都是静态链接的(c运行时除外)

我目前的理解是:

可以进行只测试类的公共接口的单元测试,因为最终类是最适合测试的单元。问题可以在有问题的类中找到,而一个过于复杂而无法调试的类,需要对其内部结构进行单元测试,是将其分解的好选择。 这种做法使得从VisualStudio的角度在自己的项目中编写单元测试成为可能

在主项目中安装了代码覆盖率工具,如CoverageMeter,并提供了自己的构建配置,如test而不是debug。这将把度量放在外部查看器工具获取度量的目标代码中

同时,在测试配置中将主应用程序构建为库,以便外部单元测试项目使用目标代码运行其测试。同时,CoverageMeter代码包含在单元测试项目用于运行的库中,使CoverageMeter度量度量单元测试中执行了多少代码

使用与发布或调试分离的测试配置,占位符库可以用来打破依赖关系,如opengl

我的问题是: 这是天上的馅饼吗? 我的理解正确吗? 我真的可以做3的第一句话吗?我是如何让单元测试代码在主应用程序项目中运行目标代码构建的,还是有其他方法

我疯了吗? 我愿意接受任何批评。 提前感谢您抽出时间

更新:看来我对单元测试应该做什么有正确的想法,但我担心的是3。我对这些组件的理解正确吗

谢谢你的回复。得到反馈很好!这将是我的第一个大项目,我正在努力理解所有涉及的部分。我很感激你的指点


Josh

我测试除私有方法之外的所有方法,因为任何其他方法都可以从类外调用,如果有人调用我的函数,这将有助于确保不会给他们带来问题

如果他们也在测试调用我的代码,那么如果他们做出了错误的假设,我们可以很快知道最近的更改破坏了某些东西


更新:我会将公共函数的所有测试与发行版一起分发,并在内部分发其余的测试。如果人们打算针对我的API编写代码,那么单元测试可以作为一个很好的文档来源,以显示我预期会发生什么,以及如何处理无效参数

@1是的。一个类本质上是一个ADT,这意味着你只需要测试它的外部;不,这是内部的,基本上是正确的@4——你可以使用一些接口来去掉你的依赖关系。对不起,我应该特别提到,我使用C++。C++中有接口吗?我有点担心3。主项目通常作为独立的可执行文件构建。exe和对象文件之间的区别真的仅仅是因为exe定义了一个主方法,在这里插入一些魔法计算机调用来启动一个程序,而库没有吗?我使用了这个假设,询问这是否是将代码覆盖工具的数据引入单元测试项目的正确方法。再次感谢您的评论!C++抽象基类,所有功能纯虚拟的都相当接近java接口。所以你是说你用你的产品分配测试套件?你能再解释一下你的第二段吗?你说的是团队成员还是最终用户?谢谢你的回复!