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; } }; 这很容易,但测试将失败:( 结论:测试私有实现细节会破坏测试的目的,因为每次修改代码时,您都可能需要“修复”测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |