假设我在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; } };
这很容易,但测试将失败:(