📖 说明:
本文档主要介绍如何让测试检查发送到标准输出或标准错误流的数据。
C/C++test提供的流API #
以下内容来自用户手册https://docs.parasoft.com/pages/viewpage.action?pageId=164111251:
宏 | 定义 |
---|---|
CppTest_StreamRedirect CppTest_RedirectStdInput(const char value); | 将当前测试用例的 stdin 流的值设置为提供的字符串的值。 |
CppTest_StreamRedirect CppTest_RedirectNStdInput(const char value, unsigned int size) | 将当前测试用例的 stdin 流的值设置为所提供字符串的第一个 'size' 字符的值。 |
CppTest_StreamRedirect* CppTest_RedirectStdOutput() | 重定向当前执行的测试用例的 stdout 流。返回的 CppTest_StreamRedirect 对象可用于验证测试用例后置条件部分中的流内容。在当前测试用例执行结束时自动恢复标准输出流的先前值。 |
CppTest_StreamRedirect* CppTest_RedirectStdError() | 为当前执行的测试用例重定向 stderr 流。返回的 CppTest_StreamRedirect 对象可用于验证测试用例后置条件部分中的流内容。在当前测试用例执行结束时自动恢复 stderr 流的先前值。 |
CppTest_StreamCompare(CppTest_StreamRedirect redirect, const char value) | 用于验证重定向的 stdout/stderr 流的内容。如果“值”与流值匹配,则返回 0;如果“值”小于流值,则返回小于零的整数;如果“值”大于流值,则返回大于零的整数。 |
CppTest_StreamNCompare(CppTest_StreamRedirect redirect, const char value, unsigned int size) | 用于验证重定向的 stdout/stderr 流的内容。如果“值”与流值匹配,则返回 0;如果“值”小于流值,则返回小于零的整数;如果“值”大于流值,则返回大于零的整数。仅比较流的第一个 'size’字符。 |
int CppTest_StreamSearch(CppTest_StreamRedirect, redirect, const char* pattern) | 用于验证重定向的 stdout/stderr 流的内容。在重定向流中搜索给定模式。返回在流中找到的模式的索引,如果未找到模式,则返回 -1。 |
int CppTest_StreamNSearch(CppTest_StreamRedirect redirect, const char pattern, unsigned int size) | 用于验证重定向的 stdout/stderr 流的内容。在重定向流中搜索给定模式的第一个 'size’字符。返回在流中找到的模式的索引,如果未找到模式,则返回 -1。 |
char CppTest_StreamReadData(CppTest_StreamRedirect redirect, unsigned int* len) | 返回一个指向缓冲区的指针,其中包含从重定向流中读取的数据。缓冲区的大小将在 'len' 参数中传回(如果将非空值传递给函数)。缓冲区由 cpptestMalloc()函数分配。应该使用 cpptestFree() 函数释放返回的缓冲区。 |
void CppTest_StreamReset(CppTest_StreamRedirect* redirect) | 将 C++test 内部流重置为默认状态。它在测试用例执行结束时为每个重定向流自动完成。 |
示例 #
有如下被测函数:
int foo() {
int number;
// 从用户获取输入
printf("Please enter an integer: \n");
scanf("%d", &number);
// 使用if-else语句判断输入的数字是否为正数
if (number > 0) {
printf("%d is a positive number.\n", number);
} else if (number < 0) {
printf("%d is a negative number.\n",number);
} else {
printf("This is zero.\n");
}
return number;
}
示例测试用例如下:
/* CPPTEST_TEST_CASE_BEGIN test_foo_m1 */
/* CPPTEST_TEST_CASE_CONTEXT int foo(void) */
void TestSuite_sensor_c_61678bb2_test_foo_m1()
{
/* Pre-condition initialization */
CppTest_StreamRedirect* _stdinStreamRedirect = CppTest_RedirectStdInput("-1\n");
CppTest_StreamRedirect* output_stream = CppTest_RedirectStdOutput();
/* Pre-condition report */
{
/* Tested function call */
int _return = foo();
int len;
CppTest_StreamReset(_stdinStreamRedirect);
/* Post-condition report */
CPPTEST_REPORT_INTEGER("Output: int _return", ( _return ));
/* Post-condition check */
CPPTEST_POST_CONDITION_INTEGER("int _return", ( _return ));
CPPTEST_POST_CONDITION_CSTR("messages",CppTest_StreamReadData(output_stream, &len));
/* Post-condition check */
CPPTEST_ASSERT_CSTR_EQUAL("Please enter an integer: \n-1 is a negative number.\n",CppTest_StreamReadData(output_stream, &len));
CPPTEST_ASSERT(0 == CppTest_StreamCompare(output_stream, "Please enter an integer: \n-1 is a negative number.\n"));
CPPTEST_ASSERT_INTEGER_EQUAL(-1, ( _return ) );
}
}
/* CPPTEST_TEST_CASE_END test_foo_m1 */
下面是这条测试用例的执行结果: