C语言 我是否应该对预期的断言进行单元测试



我正在对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

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

理想情况下,单元测试应该测试函数/API 的核心功能。不需要测试断言,因为它在您的方法范围内不可修改。

这与核心业务逻辑中任何其他第三方依赖项的使用非常相似。但是,这种情况可以在集成测试中涵盖,但在单元测试中则不然。

最新更新