2014-12-12 1 views
1

Я делаю некоторые модульные тесты для 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; 
     } 
    } 

ответ

0

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

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

3

Чтобы проверить или нет, чтобы проверить утверждения ...

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

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

Рекомендовать утверждения для испытаний при единичном тестировании.