#c #unit-testing #unity-test-framework
#c #модульное тестирование #unity-test-framework
Вопрос:
У меня есть программа-чат-бот, которая использует вызываемую функцию userInput()
для получения входных данных от пользователя.
Я должен протестировать программу для своего проекта, но я не знаю, как ввести текст в функцию в тестовой программе. Все, что я пробовал, остановило автоматическое тестирование, ожидая, пока пользователь что-то введет.
Любая помощь в добавлении тестовых фраз, которые пользователь сказал бы, не останавливая программу тестирования.
char *userInput()
{
char *str = NULL;
int ch;
size_t size = 0, len = 0;
while ((ch=getchar()) != EOF amp;amp; ch != 'n') {
if (len 1 >= size)
{
size = size * 2 1;
str = realloc(str, sizeof(char)*size);
}
str[len ] = ch;
}
if (str != NULL) {
str[len] = '';
}
return str;
}
Комментарии:
1. Если я правильно понимаю, что вы хотите сделать, моим лучшим решением было бы прочитать из файла, содержащего кучу тестовых фраз. Если вы не перейдете к потоковой обработке,
getchar()
всегда будет блокировать выполнение до тех пор, пока оно не сможет прочитатьchar
.2. Почему буфер (str) увеличивается более чем в два раза быстрее, чем количество вводимых символов?
Ответ №1:
Я придерживался идеи anonmess о том, что вы можете вводить текст от пользователя, используя входной файл. Я использовал входной файл со следующими строками:
testing input
testing input 2
Имя входного файла задается через командную строку. Вы можете жестко запрограммировать имя файла, если хотите.
#include <stdio.h>
#include <string.h>
int processInputFile(char *filename)
{
FILE *ifp;
char buffer[1024];
char *p;
if ((ifp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "Failed to open "%s " in processInputFile.n", filename);
return -1;
}
while ((fgets(buffer, sizeof(buffer), ifp)) != NULL)
{
// remove newline character
p = strchr(buffer, 'n');
if (p != NULL)
*p = '';
// We can also remove the newline character by getting
// its length and chomping the last character
// int length = strlen(buffer);
// buffer[length - 1] = '';
printf("%sn", buffer);
}
fclose(ifp);
}
int main(int argc, char **argv)
{
if (argc < 2)
{
printf("Proper syntax: ./a.out <n>n");
return -1;
}
processInputFile(argv[1]);
return 0;
}
Файл прочитан, и строки напечатаны. Вы можете передать строку другой функции в цикле while.