加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如果私有变量发生了变化,如何进行单元测试

发布时间:2020-12-16 03:25:31 所属栏目:百科 来源:网络整理
导读:假设我在C中有这个类: class ExampleClass{private: int example_var;public: void exampleMethod(){ example_var = other_value; // other value will be always different }} 我如何单元测试exampleMethod()?我想做这样的事情: void testExampleMethod(
假设我在C中有这个类:
class ExampleClass{
private:
    int example_var;
public:
    void exampleMethod(){
         example_var = other_value; // other value will be always different
    }
}

我如何单元测试exampleMethod()?我想做这样的事情:

void testExampleMethod(){
    ExampleClass obj;
    int before_call_value = obj.example_var;
    obj.exampleMethod();
    int after_call_value = obj.example_var;
    ASSERT_NOT_EQUALS(before_call_value,after_call_value);
}

但是example_var是私有的.

那么,进行单元测试的正确方法是什么?如何测试私有example_var是否已更改?

解决方法

简短的回答:不要这样做.

您的测试应仅针对公共接口进行测试.让我试着解释一些代码:

class Adder {
    int a,b;
public:
    Adder() : a(0),b(0) {}
    void set(int x,int y) { a=x;b=y; }
    int get()             { return a+b; }
};

和测试(假设我们有权访问a和b):

void testAdder(){
    Adder add;
    int a = 1;
    int b = 2;
    add.set(a,b);
    ASSERT_EQUALS(add.a,a);
    ASSERT_EQUALS(add.b,b);
    ASSERT_EQUALS(add.get(),a+b);
}

假设您已经分发了代码并且有人正在使用它.他想继续使用它,但抱怨内存消耗过多.在保持相同的公共接口的同时解决此问题很简单:

class Adder {
    int c;
public:
    Adder() : c(0) {}
    void set(int x,int y) { c = x+y; }
    int get()             { return c; }
};

这很容易,但测试将失败:(

结论:测试私有实现细节会破坏测试的目的,因为每次修改代码时,您都可能需要“修复”测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读