2011-01-31 79 views
4

我是新的测试驱动开发人员,并且第一次尝试在简单的项目中使用它。TDD重复测试数据

我有一个类,我需要测试创建,插入和删除这个类的对象。如果我编写三个独立的测试函数,我需要在其他函数中复制初始化代码。如果我把所有的测试都放在一个测试函数中,那么这与每个函数的一个测试是矛盾的。我该怎么办?

这里的情况:

tst_create() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 
} 

tst_insert() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); //Also I need to delete obj_id somehow in order to preserve old state 
} 

tst_delete() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); 

    delete(obj_id); 
} 

VS

tstCreateInsertDelete() 
{ 
    createHead(head); 
    createBody(body); 
    createFoot(foot); 

    obj_id=insert(obj); 

    delete(obj_id); 
} 

回答

4

因素出在你测试的重复。

根据您的测试框架,可能会支持定义在每次测试执行前调用的安装方法以及在每次测试后调用的拆卸方法。

无论如何,您可以提取常用的东西,以便您只需重复调用一个共享设置。

如果您告诉我们您使用的语言和测试框架,我们可能会提供更具体的建议。

+0

C++和Qt框架。 – metdos 2011-01-31 14:40:37

+0

我不能再帮助C++和Qt,但其他人可能会更进一步。 – 2011-01-31 16:13:14

6

而不是“每个功能的一个测试”,试着将其考虑为“每个功能的行为的一个方面”。

什么插入物体给你?如何删除一个对象?为什么这些很有价值?你怎么能告诉你做了他们?编写一个如何使用代码的例子,以及为什么这种行为是有价值的。那就成了你的考验。

当您计算出您感兴趣的行为后,只有在测试更易于读取时,才能提取出重复项。 TDD不仅仅是测试;它还涉及提供文档,并帮助您考虑每个代码元素的责任和代码的设计。测试可能会比他们写的要多得多,所以可读性必须首先考虑。

如有必要,请将您感兴趣的所有行为放在一个方法中,并确保其可读性。您可以根据需要添加注释。