51Testing软件测试论坛

标题: cppunit如何处理被测试函数调用其他函数的情况 [打印本页]

作者: edwardlj    时间: 2006-2-1 18:18
标题: cppunit如何处理被测试函数调用其他函数的情况
兄弟目前使用cppunit做单元测试,准备针对每个函数设计一个测试函数,可是不知道如何处理被测函数调用其他函数的情况。举例如下:

class A
{
private:
  void somefunc(){...}
public:
  int add(int a,int b){ return a+b;}
  void func(){ somefunc();}
}

针对class A进行单元测试时,设计下面的测试类:

class ATest
{
  CPPUNIT_TEST_SUITE( ATest);
  CPPUNIT_TEST( test_constructor );
  CPPUNIT_TEST( test_model );
  CPPUNIT_TEST( test_view );
  CPPUNIT_TEST_SUITE_END();

public:
  void test_somefunc();
  void test_add();
  void test_func();
}
test_add()是cppunit非常容易解决的情况,根据返回值判断函数的执行是否正确,大多数cppunit的文章都由该情况的处理方法。可是对于void func()函数,由于他没有自己的输出数据,所以很难直接判断它的正确性,除非将他和void somefunc()合在一起进行测试,但是当这种函数调用比较复杂的情况下测试用例的组织也变得复杂,请教各位是如何处理这种情况的?
作者: VisualUnit    时间: 2006-2-1 20:32
标题: 输出输出数据不仅仅是返回值和参数,代码总是干了什么的
几点看法,仅供参考:
1、单元测试从底层向上测试,func()调用了 somefunc(),先测试somefunc(),再测试func()。
2、一个代码单元所涉及的输入输出数据有很多,除了参数、返回值外,还有成员变量、局部变量,甚至还可能读写文件和数据库,一个函数,如func(),虽然没有参数和返回值,但它总是做了什么,例如,如果它的功能是计算并修改了两个成员变量,那么,测试该函数时,设定这两个成员变量的初始值作为输入,运行代码后判断这两个成员变量的结果是否符合预期,这就是测试用例了。
3、单元测试是可以测试很复杂的代码的,除了直接写在界面类的代码难于测试外,如果代码结构不是太差,绝大多数代码都可以测试。如果只能测试简单的代码,单元测试也就没有什么实际意义了。
4、建议读一下精华区的《全面介绍单元测试》。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2