我正在试验 TDD 和 C。我想按照 TDD 方法编写一个简单的 malloc 包装器。我正在尝试遵循 Bob Martin 的 TDD 三大定律
- 不要编写生产代码,除非它是为了使失败的单元测试通过。
- 不要编写超过足以导致失败的单元测试,构建失败就是失败。
- 不要编写超过足以通过一个失败的单元测试的生产代码。
到目前为止,这是我的代码:
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。
任何的想法?谢谢