Jenkins Academy
projekt kalkulator
Struktura plików
calc_project/
├── calc.c
├── calc.h
├── main.c
├── Makefile
├── build/ # katalog na binarki
└── tests/
└── test_calc.py
calc.h
#ifndef CALC_H
#define CALC_H
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b); // Zwraca 0 jeśli b == 0
#endif
calc.c
#include "calc.h"
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int divide(int a, int b) {
if (b == 0) return 0;
return a / b;
}
main.c
#include <stdio.h>
#include "calc.h"
int main(int argc, char *argv[]) {
printf("2 + 3 = %d\n", add(2, 3));
printf("5 - 1 = %d\n", subtract(5, 1));
printf("4 * 6 = %d\n", multiply(4, 6));
printf("8 / 2 = %d\n", divide(8, 2));
return 0;
}
Makefile
CC=gcc
CFLAGS=-Wall
BIN=build/calc
all: $(BIN)
$(BIN): main.c calc.c
mkdir -p build
$(CC) $(CFLAGS) -o $(BIN) main.c calc.c
clean:
rm -rf build
Testy
tests/test_calc.py
import subprocess
def run_calc_and_capture_output():
result = subprocess.run(["./build/calc"], capture_output=True, text=True)
return result.stdout.strip()
def test_add():
output = run_calc_and_capture_output()
assert "2 + 3 = 5" in output
def test_subtract():
output = run_calc_and_capture_output()
assert "5 - 1 = 4" in output
def test_multiply():
output = run_calc_and_capture_output()
assert "4 * 6 = 24" in output
def test_divide():
output = run_calc_and_capture_output()
assert "8 / 2 = 4" in output
Uruchomienie
Zbuduj program C
make
Spowoduje to utworzenie build/calc.
Zainstaluj pytest
pip install pytest
Uruchom testy
pytest tests/
Powinieneś zobaczyć wynik podobny do:
================ test session =================
collected 4 items
tests/test_calc.py .... [100%]
================= 4 passed ====================