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

时间:2014-12-12 16:02:26

标签: 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;
       }
  }

2 个答案:

答案 0 :(得分:3)

测试或不测试断言......

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

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

在单元测试中推荐测试断言。

答案 1 :(得分:0)

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

这与在核心业务逻辑中使用任何其他第三方依赖非常相似。 但是,这些情况可以在集成测试中进行,但不能在单元测试中进行。