0

是否有适当的方法来有效地针对私有变量和函数进行 TDD(测试驱动开发)?

我正在测试一个新的循环缓冲区模块。缓冲区参数保存在结构中。这些结构成员应该是私有的,因为客户端不需要接触它们。但是通过隐藏成员,测试变得更加困难。如果结构格式在标头中是公共的,我可以直接查看以确保我指向存储数组,我的读取索引是否正确,我的写入索引是否正确等等。如果是私有的,我只能测试界面,我显然需要这样做,但验证底层隐藏功能感觉缓慢且效率低下。

缓冲区

typedef struct circBuf circBuf_t;

buf.c

struct circBuf {
    privateMember_1;
    ...
    privateMember_n;  
};

我应该在我的测试功能中放置一个间谍吗?IE:

test_buf.c

#include "buf.h"      

struct spy_circBuf {
    privateMember_1;
    ...
    privateMember_n;
};

void test_circBufInit(void) 
{
    circBuf_t * p_testCircBuf;
    struct spy_circBuf * p_spy;

    p_testCircBuf = CircBuf_Init (initVar_1, ...);

    p_spy = ((struct spy_circBuf *)p_testCircBuf);

    TEST_ASSERT_EQUAL(p_spy->privateMember_1, initVar_1);
}

有没有更好的方法对私有变量和函数进行 TDD?

4

1 回答 1

1

TDD 是关于测试类的外部行为,而不是内部实现。如果您的测试着眼于内部实现,它们会很脆弱,并且如果实现细节发生变化,它们可能会中断。这将阻止您重构和改进代码。

TDD 还强调在编写必要的生产代码之前编写每个测试。这有助于避免测试实现,因为您正在为尚不存在的实现编写测试。这会鼓励您考虑班级的期望行为并编写测试来练习该行为。

于 2014-03-06T19:37:34.773 回答