Witajcie
Piszę większy projekt w C i postanowiłem zabrać się w końcu za testy jednostkowe, żeby zmniejszyć możliwość wystąpienia błędów w zachowaniu kodu. Mam jednak pewien dylemat dlatego proszę Was o pomoc z nim związaną. Mianowicie mam takie dwie funkcje:
FILE *open_config_file(const char *filename_with_ext, size_t filename_len) {
char *config_file_path = (char *)malloc(CONFIG_PATH_LEN + filename_len);
if (config_file_path == NULL) {
print_error_and_exit("Malloc for config_file_path");
}
set_config_file_path(config_file_path, filename_with_ext);
FILE *config_file = fopen(config_file_path, "r");
free(config_file_path);
return config_file;
}
void set_config_file_path(char *config_file_path, const char *filename_with_ext) {
strncpy(config_file_path, "../conf/", CONFIG_PATH_LEN);
strcat(config_file_path, filename_with_ext);
}
Chciałbym wykonać test funkcji open_config_file
, ale wewnątrz niej wywoływana jest również funkcja set_config_file_path
, która nic nie zwraca, ponieważ metody, które są wewnątrz niej wywoływane zwracają jedynie adres źródła, a więc nie obsługuje się błędów. Dlatego nie widzę możliwości, aby stworzyć mock
funkcji set_config_file_path
. Skoro nie mogę symulować tejże funkcji w teście jednostkowym to przetestowanie zachowania funkcji open_config_file
nie będzie testem jednostkowym tylko integralnym, mam rację? Jeśli jest możliwość "mockowania" metody set_config_file_path
to jak mogę to zrobić bez zwracania żadnych wartości? Jeśli nie to czy mogę zostawić tę funkcję w oryginale?
Do testowania korzystam z frameworka CMocka
, w którym w dość prosty sposób można obsłużyć symulowanie funkcji.
Z góry dziękuję za wszelką pomoc.