私は TDD と C を試しています。TDD アプローチに従って単純な malloc ラッパーを書きたいと思っています。ボブ・マーティンの TDD の 3 つの法則に従おうとしています。
- 失敗した単体テストに合格するためでない限り、製品コードを記述しないでください。
- 失敗するのに十分な量以上の単体テストを作成しないでください。ビルドの失敗は失敗です。
- 失敗した 1 つの単体テストに合格するのに十分な数以上の製品コードを記述しないでください。
これは今までの私のコードです:
J_STATUS MemAlloc(long Size, void **OutPtr) {
J_STATUS ReturnStatus;
void *Ptr;
Ptr = NULL;
if (Size >= 0) {
Ptr = malloc(Size);
*OutPtr = Ptr;
ReturnStatus = SUCCESS;
//TODO controllare malloc error
} else {
ReturnStatus = ERROR;
}
return ReturnStatus;
}
そして、これらは私のテストです(私はUnityテストフレームワークを使用しています):
#include "../unity/unity.h"
#include "../src/jMem.h"
#include "stdlib.h"
static int *ptr;
static J_STATUS Result;
static long Size;
static long Count;
void setUp() {
ptr = NULL;
Size = 10;
Count = 5;
}
void tearDown() {
if (ptr != NULL) {
free(ptr);
}
}
void test_MemAllocShouldAllocateMemoryAndReturnSuccess(void) {
Result = MemAlloc(Size, (void **) &ptr);
TEST_ASSERT_EQUAL(SUCCESS, Result);
TEST_ASSERT_NOT_NULL(ptr);
}
void test_MemAllocShouldReturnErrorIfSizeIsNegative(void) {
Size = -4;
Result = MemAlloc(Size, (void **) &ptr);
TEST_ASSERT_EQUAL(ERROR, Result);
}
失敗した malloc のテストをどのように作成すればよいでしょうか。異なるバージョンの malloc をリンクしたり、malloc を失敗させるマクロを記述したりできることはわかっていますが、これはこのテストにのみ当てはまり、他のテストでは実際の malloc を使用したいと考えています。
何か案が?ありがとうございました