Должен ли я провести модульный тест ожидаемых утверждений?

Я делаю некоторые модульное тестирование на C в CUnit. У меня есть некоторые предварительные условия для функции вставки, которая гласит, что некоторые параметры буфера не должны превышать определенный размер буфера. В функции вставки я сделал несколько утверждений для защиты от этого. Теперь я должен сделать модульный тест для этих ожидаемых утверждений?

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 ответа

Проверять или не проверять утверждения...

При тестировании delete()скажем, модульные тесты не проверяют утверждения, но утверждение закодировано неправильно. Когда эта ошибка обнаруживается - во время теста более высокого уровня? Это побеждает юнит-тестирование.

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

Рекомендовать проверять утверждения при юнит-тестировании.

Модульное тестирование в идеале должно проверять основные функциональные возможности функции /API. Тестирование утверждений не требуется, поскольку оно не может быть изменено в рамках вашего метода.

Это очень похоже на использование любых других сторонних зависимостей в основной бизнес-логике. Однако такие случаи могут быть рассмотрены в интеграционных тестах, но не в модульных тестах.

Другие вопросы по тегам