c - 我应该对预期的断言进行单元测试吗?

标签 c unit-testing assert cunit

我正在 CUnit 中对 C 进行一些单元测试。我对插入函数有一些先决条件,规定某些缓冲区参数不应超过特定的缓冲区大小。在插入函数中,我做了一些断言来防止这种情况。现在,我应该对这些预期的断言进行单元测试吗?

db.c:

  #define BUFFER_SIZE 128

  ...

  Node *delete(char *key, char *buffer_msg, Node *root) {
        assert(sizeof(key) <= BUFFER_SIZE);
        assert(sizeof(buffer_msg) <= BUFFER_SIZE);
        assert(root != NULL);

        ...
  }

test_db.c:

  void test_delete_buffer_size_should_cast_assertion(void){
        if (NULL != fileDb) {
              //Arrange
              char *key = "Test";
              char buffer_msg[129];
              Node *database = NULL;     

              //Act
              database = create_db(fileDb);

              //Assert
              CU_ASSERT(delete(key, buffer_msg, database)); <-- ???

              //Clean up
              free(database);
              database = NULL;
       }
  }

最佳答案

测试或不测试断言...

测试delete()时,假设单元测试不测试断言,但断言编码错误。在更高级别的测试期间何时发现此错误?这击败了单元测试。

assert(sizeof(buffer_msg) >= BUFFER_SIZE);  // incorrect assertion
assert(sizeof(buffer_msg) >  BUFFER_SIZE);  // correct assertion

建议在单元测试中测试断言。

关于c - 我应该对预期的断言进行单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447444/

相关文章:

c - libpng,c代码,如何将RGB值转换为像素值?

php - Yii 装置 --- 异常 : Unknown property 'projects' for class 'ProjectTest'

Java:关于断言行为的问题

c - C 中的链接列表节点,结构原型(prototype)

c、opencv——通过ip访问相机JPG图像

c++ - 没有头文件的C/C++程序

c# - 最小起订量单元测试通用方法

java - 为服务功能编写单元测试

go - 无法生成覆盖

javascript - 一个断言函数,不需要您输入错误消息