C 在使用unity进行测试时忽略用户输入

C 在使用unity进行测试时忽略用户输入,c,unit-testing,unity-test-framework,C,Unit Testing,Unity Test Framework,我有一个聊天机器人程序,它使用一个名为userInput()的函数来获取用户的输入 我必须为我的项目测试程序,但我不知道如何在测试程序的函数中输入文本。我所尝试的一切都停止了等待用户键入内容的自动测试 添加用户在不停止测试程序的情况下会说的测试短语的任何帮助 char *userInput() { char *str = NULL; int ch; size_t size = 0, len = 0; while ((ch=getchar()) != EOF &a

我有一个聊天机器人程序,它使用一个名为
userInput()
的函数来获取用户的输入

我必须为我的项目测试程序,但我不知道如何在测试程序的函数中输入文本。我所尝试的一切都停止了等待用户键入内容的自动测试

添加用户在不停止测试程序的情况下会说的测试短语的任何帮助

char *userInput()
{
    char *str = NULL;
    int ch;
    size_t size = 0, len = 0;

    while ((ch=getchar()) != EOF && ch != '\n') {
        if (len + 1 >= size)
        {
            size = size * 2 + 1;
            str = realloc(str, sizeof(char)*size);
        }
        str[len++] = ch;
    }

    if (str != NULL) {
        str[len] = '\0';
    }

    return str;
}

我使用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 = '\0';

        // We can also remove the newline character by getting
        // its length and chomping the last character

        // int length = strlen(buffer);
        // buffer[length - 1] = '\0';

        printf("%s\n", 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;
}
#包括
#包括
int processInputFile(字符*文件名)
{
文件*ifp;
字符缓冲区[1024];
char*p;
if((ifp=fopen(文件名,“r”))==NULL)
{
fprintf(stderr,“无法在processInputFile中打开\%s\”。\n,“文件名”);
返回-1;
}
while((fgets(buffer,sizeof(buffer,ifp))!=NULL)
{
//删除换行符
p=strchr(缓冲区“\n”);
如果(p!=NULL)
*p='\0';
//我们还可以通过获取
//它的长度和咀嚼最后一个字符
//int length=strlen(缓冲区);
//缓冲区[长度-1]='\0';
printf(“%s\n”,缓冲区);
}
fclose(ifp);
}
int main(int argc,字符**argv)
{
如果(argc<2)
{
printf(“正确语法:./a.out\n”);
返回-1;
}
processInputFile(argv[1]);
返回0;
}

读取文件并打印行。可以将字符串传递给while循环中的另一个函数

我带着Anonmes的想法运行,您可以使用输入文件从用户输入文本。我使用了一个具有以下行的输入文件:

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 = '\0';

        // We can also remove the newline character by getting
        // its length and chomping the last character

        // int length = strlen(buffer);
        // buffer[length - 1] = '\0';

        printf("%s\n", 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;
}
#包括
#包括
int processInputFile(字符*文件名)
{
文件*ifp;
字符缓冲区[1024];
char*p;
if((ifp=fopen(文件名,“r”))==NULL)
{
fprintf(stderr,“无法在processInputFile中打开\%s\”。\n,“文件名”);
返回-1;
}
while((fgets(buffer,sizeof(buffer,ifp))!=NULL)
{
//删除换行符
p=strchr(缓冲区“\n”);
如果(p!=NULL)
*p='\0';
//我们还可以通过获取
//它的长度和咀嚼最后一个字符
//int length=strlen(缓冲区);
//缓冲区[长度-1]='\0';
printf(“%s\n”,缓冲区);
}
fclose(ifp);
}
int main(int argc,字符**argv)
{
如果(argc<2)
{
printf(“正确语法:./a.out\n”);
返回-1;
}
processInputFile(argv[1]);
返回0;
}

读取文件并打印行。可以将字符串传递给while循环中的另一个函数

如果我理解了您想要正确执行的操作,那么我的最佳解决方案是从包含大量测试短语的文件中读取。除非您进入线程,否则
getchar()
将始终阻止执行,直到它可以读取
char
。为什么缓冲区(str)增加的速度是输入字符数的两倍以上?如果我正确理解您想要做的事,我的最佳解决方案是从包含一堆测试短语的文件中读取。除非进入线程,否则
getchar()
将始终阻止执行,直到它可以读取
char
。为什么缓冲区(str)的增加速度是输入字符数的两倍以上?