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
C++ 测试班_C++_Unit Testing - Fatal编程技术网

C++ 测试班

C++ 测试班,c++,unit-testing,C++,Unit Testing,我昨天组织了一个班来做一些有用的任务。我开始了alpha测试,并且在某个时候意识到我正在向类本身添加alpha测试相关的方法。我突然想到他们不属于那里。经过一番努力,我从基类派生了一个测试类,该类也可以访问受保护的成员。我将所有与测试相关的方法都放在测试类中,并在测试类中进行设置和拆除,让基类像老话所说的那样精简和平均 在浏览了一段时间后,我发现一条评论建议使用这种技术,让测试类成为真实类的朋友 回想起来,这两种技术对我来说都是显而易见的 我想要的是专门针对alpha测试/单元测试类的技术,而不

我昨天组织了一个班来做一些有用的任务。我开始了alpha测试,并且在某个时候意识到我正在向类本身添加alpha测试相关的方法。我突然想到他们不属于那里。经过一番努力,我从基类派生了一个测试类,该类也可以访问受保护的成员。我将所有与测试相关的方法都放在测试类中,并在测试类中进行设置和拆除,让基类像老话所说的那样精简和平均

在浏览了一段时间后,我发现一条评论建议使用这种技术,让测试类成为真实类的朋友

回想起来,这两种技术对我来说都是显而易见的

我想要的是专门针对alpha测试/单元测试类的技术,而不增加被测试类的权重。


您个人使用并推荐了哪些技术?单元测试的目标之一是验证与类的接口。这意味着,一般来说,你不应该测试你的类的脏的内部。单元测试应该与类的公共输入和输出交互,并验证行为是否符合预期。因此,您可以更改类的内部实现,而不会影响依赖它的所有其他对象。显然,我不知道你的情况的细节,但我想说,作为一般规则,如果你的单元测试试图找出类的私有细节,那么你就做错了


编辑:另请参见:。请注意,这是可以做到的(最上面的答案),但也请注意,第二名的答案(短边)所说的内容与我上面提到的大致相同。

这些都是好的。我通常也希望测试类不仅是原始的,而且是在一个完全不同的DLL/EXE中,以及从编译成的“真实”DLL/EXE测试“真实”编译类

我发现的另一种技术是在测试工具中重新定义类。准确复制类定义,但将所有内容公开。这允许测试工具对类进行“白盒”访问,但实际实现仍然来自真实的类代码

i、 e

然后:

class test_myClass
{
public:
    int foo;
public:
    test_myClass();
};

void test()
{
    myClass *c = new myClass();
    test_myClass *t = (test_myClass*)c;
    // All methods are called on c.
    // White-box access is available through t.
};

哦。。。DevStudio 2008现在有一些非常酷的单元测试功能,包括声明“friend”程序集的功能,它允许白盒访问正在测试的程序集中的所有内部类。

我已经完成了很多框架构建-基本上调用了我想要测试的类/接口。课堂上没有额外的作业

我还多次构建类,使公共方法成为虚拟的。我从中派生并制作了测试类/对象。测试对象方法调用父(实类)方法,并记录所有调用和结果。这更多的是用于日志记录而不是测试,但它也很有效

在所有关于单元测试之类的炒作之前,我使用了上述方法。(大约20世纪90年代末)

它当时对我来说很好,但我对Junit/nunit的东西做得不多,我渴望在真正的项目上给他们一个体验

一种方法的样本

阶级事务

{

公众: 虚拟DoStuff(); . .. };

课堂思维测试:公共事物

{

虚拟DoStuff()

{

//记录调用和参数

//打电话给家长

//记录返回值

//返回返回值

}


})

eJames是正确的单元测试需要关注类的输入产生正确输出的接口。任何private或friend变量都是实现的一部分,没有经过专门测试


如果您在类的私有例程中出错,那么它将显示不正确的输出

听起来你不想进行单元测试,单元测试是验证类接口是否正常工作的正确方法。为了进行单元测试,您根本不需要更改类。如果您正在寻找一种方法来验证对象的内部状态,使其保持一致,那么您应该研究可以从对象内部验证内部状态的方法

但同时,有时需要检查对象的内部状态。或者对私有方法进行单元测试,以确保它“作为一个单元”正常工作,而不需要对调用private method.Yep的公共方法进行“系统测试”。我明白你的意思。单元测试的定义是错误的。@Jeff B:绝对正确。我曾多次遇到这种情况,但一直都是因为我做错了什么。每当一个类有如此复杂的内部结构,以至于我发现自己想要测试它们时,这意味着我需要将该类重构为更实用的部分!当你想测试私有的东西时,考虑把它提取到一个专用的类,在那里它是公共的,这样你就可以单独测试它。实例化这个新类,使其对初始class.Ya是私有的。当我看的时候,我没有发现另一个问题。谢谢eJames。你在这里违反了一个定义规则,改变可访问性修饰符会改变布局,这将是一场灾难。
class test_myClass
{
public:
    int foo;
public:
    test_myClass();
};

void test()
{
    myClass *c = new myClass();
    test_myClass *t = (test_myClass*)c;
    // All methods are called on c.
    // White-box access is available through t.
};