#python #c #unit-testing
#python #c #модульное тестирование
Вопрос:
Фреймворки модульного тестирования на основе Python, такие как «nose», обладают множеством богатых функций, интересно, сможем ли мы использовать их для тестирования кода C.
Ответ №1:
Конечно, вы можете…. но вам нужно будет написать привязку для вызова вашего кода C на python (например, с ctypes) и написать тесты на python (это действительно возможно и простой способ выполнения интеллектуальных тестов)
Пример :
- Напишите фиктивную библиотеку C.
foolib.c
int my_sum(int , int);
int my_sum(int a , int b);
{
return a b;
}
- Скомпилируйте его как общую библиотеку:
gcc -shared -Wl,-soname,foolib -o foolib.so -fPIC foolib.c
- Напишите оболочку с ctypes:
foolib_test.py
import ctypes
import unittest
class FooLibTestCase(unittest.TestCase):
def setUp(self):
self.foolib = ctypes.CDLL('/full/path/to/foolib.so')
def test_01a(self):
""" Test in an easy way"""
self.failUnlessEqual(4, foolib.my_sum(2, 2))
И затем, при выполнении этого теста с помощью nose, у вас должен быть хороший тест вашего кода на C 🙂
Комментарии:
1. Не могли бы вы уточнить или привести мне пример, чтобы я мог понять, насколько сложным это будет. Спасибо
2. Если это простые файлы C, такие как adder или hello world, я считаю, что этот подход сработает, что, если это устаревший код, и один файл имеет много зависимостей, и одному модулю нужен другой, как это будет работать?
3. @kamal: самой сложной частью в случае сложного кода будет часть makefile 🙂
4. Два незначительных замечания по поводу приведенного выше примера. Во-первых,
int my_sum(int a, int b)
после него не должно быть точки с запятой при второй записи, а такжеself.failUnlessEqual(4, self.foolib.my_sum(2,2))
(обратите внимание наself.failUnlessEqual
)