统一测试时忽略用户输入

时间:2019-04-23 18:34:55

标签: c unit-testing

我有一个聊天机器人程序,该程序使用名为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;
}

1 个答案:

答案 0 :(得分:0)

我支持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;
}

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