Take a look at vstr library source code. This is de facto a standard on tests implementation in C without any additional tools like googletest. See below what to do if you do not want to put one more tool to your project but still need tests.
tst_main.c
Script to start tests test.sh
tst_main.c
#include <stdlib.h>
#include "backup_app.h"
#include "tst.h"
int main (int argc, char ** argv) {
DBHOST = "127.0.0.1";
DBUSER = "root";
DBDB = "???";
DBPORT = 3306;
return tst();
}
/*---------------------------------------------------
mocks */
int snmp_log(int priority, const char *format, ...) {
va_list ap;
va_start(ap, format);
if (vfprintf(stderr, format, ap) < 0)
goto error;
va_end(ap);
return 0;
error:
va_end(ap);
return 1;
}
One of the tests, tst_cmd_ok.c#include <stdlib.h>
#include "extern_cmd.h"
#include "tst.h"
int tst() {
int ret;
char *args[] = {"/bin/ls", "-l", NULL};
char *res = mb_cmd_exec(args, NULL);
ret = (res) ? SUCCESS : FAILED;
free(res);
return ret;
}
Makefile
.PHONY: clean
CC=gcc
CFLAGS=-g -Wall -I..
LDFLAGS=-Wl,--unresolved-symbols=ignore-all
HEADERS=$(wildcard ../*.h)
OBJECTS=$(patsubst %.c,%.o,$(wildcard *.c))
TO_TEST_OBJECTS=$(patsubst %.c,%.o,$(wildcard ../*.c))
MAIN_TST_OBJ=tst_main.o
BUILDLIBS=-lmysqlclient_r -lpthread
_TESTS=$(patsubst %.c,%,$(wildcard *.c))
TESTS=$(patsubst tst_main,,$(_TESTS))
all: $(OBJECTS) $(TESTS)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $<
$(TESTS): $(TO_TEST_OBJECTS) $(MAIN_TST_OBJ) $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) $(patsubst %,%.o,$@) $(TO_TEST_OBJECTS) $(MAIN_TST_OBJ) -o $@ $(BUILDLIBS)
clean:
rm -f *~ *.o $(TESTS)
Note LDFLAGS=-Wl,--unresolved-symbols=ignore-allScript to start tests test.sh
#!/bin/sh
for result in `find . -maxdepth 1 -perm /u=x,g=x,o=x -type f -name 'tst_*'`;
do
$result
exit_st=$?
if [ $exit_st -eq 0 ]
then
echo $result : ok
else
echo $result : failed
fi
done
No comments:
Post a Comment