Skip to main content

C test-driven development framework implemented in Python

Project description

ctdd

tl:dr

C test-driven development framework implemented in Python.

Info

The testing framework is Python's native unittest, with a few extra asserts ans stuff provided by John. The tester looks for a .c and .h pair with the same name as the .py test file. It builds them into a Python extension using Crelm (which in turn uses cffi) and runs the Python tests as if it were testing Python code. C callbacks are mocked in Python (demo to follow..), meaning that there is exactly zero C code involved in the testing.

Example

There is a demo of a TDD'd add3 function in __main__.py, __main__.c and __main__.h in the root of the repo, run with python3 .. The silly filenames are to suit the Python auto-run mechanism.

The files are reproduced here (possibly out of date) with original filenames:

add3.py

from ctdd import Tester

class Add3Tests(Tester):

    def test_sut_compiles(self):
        with self.assertDoesNotRaise():
            self.sut

    def test_takes_three_f(self):
        with self.assertDoesNotRaise():
            self.sut.add3(0, 0, 0)

    def test_return_zero_for_zeros(self):
        expected = 0

        actual = self.sut.add3(0, 0, 0)

        self.assertEqual(expected, actual)

    def test_returns_sum(self):
        expected = 14

        actual = self.sut.add3(1, 4, 9)

        self.assertEqual(expected, actual)

Tester.go()

add3.h

#pragma once

int add3(int a, int b, int c);

add3.c

#include "__main__.h"

int add3(int a, int b, int c)
{
    return a + b + c;
}

To use this in real life install the package with pip install ctdd (in a virtualenv if you prefer), and run python add3.py after each add test or add code iteration.

Test output is exactly what unittest said (with distutils deprecation warning removed):

...........
----------------------------------------------------------------------
Ran 11 tests in 2.104s

OK

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ctdd-0.0.7.tar.gz (7.4 kB view hashes)

Uploaded Source

Built Distribution

ctdd-0.0.7-py3-none-any.whl (8.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page