0

プライベート変数と関数に対して効率的に TDD (テスト駆動開発) を行う適切な方法はありますか?

新しい循環バッファ モジュールをテストしています。バッファ パラメータは構造体に保持されます。これらの構造体メンバーは、クライアントがそれらに触れる必要がないため、プライベートにする必要があります。ただし、メンバーを非表示にすると、テストがはるかに難しくなります。構造体形式がヘッダーで公開されている場合、ストレージ配列を指していること、読み取りインデックスが正しいこと、書き込みインデックスが正しいことなどを直接確認できます。非公開の場合、テストできるのはこれは明らかに行う必要がありますが、根底にある隠された機能を検証するのは遅く、非効率的です。

buf.h

typedef struct circBuf circBuf_t;

buf.c

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

テスト関数にスパイを配置する必要がありますか? すなわち:

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 に答える