如何保证单元测试覆盖率

This commit is contained in:
建峰 2024-08-29 14:36:21 +08:00
parent 015ecd1cf9
commit 142a248d34
3 changed files with 94 additions and 10 deletions

View File

@ -11,6 +11,8 @@
#ifndef _COMMON_H_ #ifndef _COMMON_H_
#define _COMMON_H_ #define _COMMON_H_
#define NDEBUG 1
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>

View File

@ -137,6 +137,10 @@ bool queue_init(struct _queue * queue, uint32_t obj_size)
{ {
assert(queue != NULL); assert(queue != NULL);
assert(obj_size > 0); assert(obj_size > 0);
if(queue == NULL || obj_size == 0)
{
return false;
}
// attribute init // attribute init
queue->_size = 0; queue->_size = 0;
@ -297,6 +301,11 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity)
{ {
assert(queue != NULL); assert(queue != NULL);
assert(obj_size > 0); assert(obj_size > 0);
assert(capacity > 0);
if(queue == NULL || obj_size == 0 || capacity == 0)
{
return false;
}
// attribute init // attribute init
queue->_size = 0; queue->_size = 0;
@ -321,7 +330,8 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity)
queue->_front = (struct _queue_node *)malloc(sizeof(struct _queue_node)); queue->_front = (struct _queue_node *)malloc(sizeof(struct _queue_node));
if(queue->_front == NULL) if(queue->_front == NULL)
{ {
return false; goto done;
// return false;
} }
queue->_back = queue->_front; queue->_back = queue->_front;
@ -329,23 +339,35 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity)
queue->_front->obj = calloc(queue->_capacity, queue->_obj_size); queue->_front->obj = calloc(queue->_capacity, queue->_obj_size);
if(queue->_front->obj == NULL) if(queue->_front->obj == NULL)
{ {
return false; goto done1;
// return false;
} }
queue->_index_front = 0; queue->_index_front = 0;
queue->_index_back = 0; queue->_index_back = 0;
return true;
done1:
free(queue->_front);
done:
return false;
} }
queue_t queue_new(void) queue_t queue_new(void)
{ {
return (struct _queue *)malloc(sizeof(struct _queue)); return (struct _queue *)calloc(1, sizeof(struct _queue));
} }
void queue_free(queue_t* queue) void queue_free(queue_t* queue)
{ {
if(*queue != NULL) // assert(queue != NULL);
if(queue != NULL && *queue != NULL)
{ {
(*queue)->destory(*queue); if((*queue)->destory != NULL)
{
(*queue)->destory(*queue);
}
free(*queue); free(*queue);
*queue = NULL;
} }
*queue = NULL;
} }

View File

@ -10,10 +10,67 @@
*/ */
#include "test.h" #include "test.h"
/** static void test_queue_new(void)
* @brief {
* queue_t queue = NULL;
*/ queue = queue_new();
TEST_ASSERT_NOT_NULL(queue);
queue_free(&queue);
TEST_ASSERT_NULL(queue);
queue_free(NULL);
}
static void test_queue_init(void)
{
queue_t queue = NULL;
// ------------------------------
queue = queue_new();
TEST_ASSERT_TRUE(queue_init(queue, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(queue, 0));
queue_free(&queue);
// ------------------------------
queue = queue_new();
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 1));
TEST_ASSERT_FALSE(queue_init2(NULL, sizeof(int),1 ));
TEST_ASSERT_FALSE(queue_init2(queue, 0, 1));
TEST_ASSERT_FALSE(queue_init2(queue, sizeof(int), 0));
queue_free(&queue);
queue_init2(queue, sizeof(int), 1);
}
static void test_queue_push(void)
{
int temp = 0;
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
uint32_t len = sizeof(data) / sizeof(data[0]);
uint32_t i = 0;
queue_t queue = NULL;
// ------------------------------
queue = queue_new();
queue_init(queue, sizeof(int));
for(i = 0; i < len; i++)
{
TEST_ASSERT_TRUE(queue->push(queue, &data[i]));
}
queue_free(&queue);
// ------------------------------
queue = queue_new();
queue_init2(queue, sizeof(int), 10);
queue_free(&queue);
}
static void test_queue_num(void) static void test_queue_num(void)
{ {
uint32_t i = 0; uint32_t i = 0;
@ -254,6 +311,9 @@ static void test_queue2_fifo_num(void)
void test_queue(void) void test_queue(void)
{ {
// TEST_MESSAGE("----- test_queue -----"); // TEST_MESSAGE("----- test_queue -----");
RUN_TEST(test_queue_new);
RUN_TEST(test_queue_init);
RUN_TEST(test_queue_num); RUN_TEST(test_queue_num);
RUN_TEST(test_queue_struct); RUN_TEST(test_queue_struct);