Должен ли я провести модульный тест ожидаемых утверждений?
Я делаю некоторые модульное тестирование на 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. Тестирование утверждений не требуется, поскольку оно не может быть изменено в рамках вашего метода.
Это очень похоже на использование любых других сторонних зависимостей в основной бизнес-логике. Однако такие случаи могут быть рассмотрены в интеграционных тестах, но не в модульных тестах.