【问题标题】:automatic testing of string processing function字符串处理功能的自动测试
【发布时间】:2016-05-23 19:13:42
【问题描述】:

我编写了一个等待用户字符输入的控制台应用程序。

应用具有功能:

    typedef char *ProcessedDataType;

    extern ProcessedDataType askUserInput(void){
        int i = getchar();
        ProcessedDataType local_var = userInputProcessed(i);
        return ProcessedDataType;
    }

    static ProcessedDataType userInputProcessed(int i){
        ...
        return PocessedDataType;
    }

现在,我想测试这个函数的几个输入。因此,通常光标会在用户输入时闪烁的地方,现在,自动地,来自包含选择字母的文件中的条目返回。然后将根据已知结果断言。

    runTest{

        // when console gets input 'A'
        ProcessedDataType local_var = askUserInput();
        assert('ProcessedA' == local_var);        }

        // when console gets input 'B'
        ProcessedDataType local_var = askUserInput();
        assert('ProcessedB' == local_var);        }

        // when console gets input 'C'
        ProcessedDataType local_var = askUserInput();
        assert('ProcessedC' == local_var);        }

测试时如何给这个函数提供相同的字符串参数?我如何“喂”控制台输入 A、B、C 等...

我不想在这里使用预处理器:How to unit test c functions involving IO?

【问题讨论】:

  • getchar 如何获得 9 个字符?
  • return ProcessedDataType; WTF?请提供可编译的代码。 assert('ProcessedA' == local_var); 应该做什么?请张贴Minimal, Complete, and Verifiable example,这表明您已经尝试过,而不是幻想。
  • typedef 能消除混乱吗?
  • 避免 typedefing 指针,它只会导致整个代码的混乱。 typedef char *ProcessedDataType; 到底怎么比 char * 短?
  • 这就是他们所说的“抽象数据类型”!?进行了详细的讨论,您能否说明为什么这样的抽象不是一个好主意?

标签: c unit-testing


【解决方案1】:

除了“getchar”显然只会收集一个字符之外......因此,我用“getchars”方法替换了这个方法,但你最终可以用你实际需要的方法替换。

您将需要在测试中模拟收集用户输入的方法。

#define getchars mockgetchars

const char* expected;
char mockgetchars() {
    return expected;
}

expected = "AAAAAAA\n";
ProcessedDataType local_var = askUserInput();
assert("AAAAAAA", local_var);

【讨论】:

  • 可能,但是您在 SUT 和测试工具之间失去了控制。您可以从测试工具中的文件中读取以填充“预期”值。
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 2010-12-27
  • 2012-09-08
  • 1970-01-01
  • 2014-04-21
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多