如何借助 CUnit 测试自定义错误消息?
How do I test custom error messages with the help of CUnit?
大家好,我是 Cunit 的新手。我的问题在代码下面,所以如果你愿意,可以跳过它。我做了一个小函数,它添加了两个正整数和returns 结果,如果任何整数小于或等于零,则它向 stderr 写入一条错误消息。
/*This file is dummy.c*/
#include "dummy.h"
int add(int a,int b)
{
if(a<=0||b<=0)
{
fprintf(stderr,"Error in arguments");
exit(EXIT_FAILURE);
}
else
return a+b;
}
这是dummy.h
#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)
这是我的 CUnit 测试代码的一部分。文件名为 testdummy.c
/*Necessary files have been included*/
void addtest()
{
CU_ASSERT_EQUAL(add(3,5),8);
CU_ASSERT_EQUAL(add(1,6),7);
/*What should I add here*/
}
我应该在指定的部分添加什么,以便我的代码也能测试错误消息?
您的代码中的错误案例很棘手。它不是为测试而设计的。它直接调用一个 libc 函数,更糟糕的是,它正在调用 exit()
。 IIRC CUnit 不支持模拟 libc 函数。因此我看到了两种半的可能性:
- 使用支持模拟的测试框架(我相信 google 测试支持)。
- 在测试上下文中通过一些丑陋的宏 hack (
#define
) 重新定义 libc 函数 (fprintf()
和 exit()
)。
- 也许您可以通过以某种方式为
fprintf()
设置文件句柄来做一些丑陋的黑客攻击,以便您可以读取输出以对其进行断言。但是你仍然剩下那个 exit()
电话。
了解模拟以及如何编写可测试代码。您的代码很难测试。不一定是。
大家好,我是 Cunit 的新手。我的问题在代码下面,所以如果你愿意,可以跳过它。我做了一个小函数,它添加了两个正整数和returns 结果,如果任何整数小于或等于零,则它向 stderr 写入一条错误消息。
/*This file is dummy.c*/
#include "dummy.h"
int add(int a,int b)
{
if(a<=0||b<=0)
{
fprintf(stderr,"Error in arguments");
exit(EXIT_FAILURE);
}
else
return a+b;
}
这是dummy.h
#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)
这是我的 CUnit 测试代码的一部分。文件名为 testdummy.c
/*Necessary files have been included*/
void addtest()
{
CU_ASSERT_EQUAL(add(3,5),8);
CU_ASSERT_EQUAL(add(1,6),7);
/*What should I add here*/
}
我应该在指定的部分添加什么,以便我的代码也能测试错误消息?
您的代码中的错误案例很棘手。它不是为测试而设计的。它直接调用一个 libc 函数,更糟糕的是,它正在调用 exit()
。 IIRC CUnit 不支持模拟 libc 函数。因此我看到了两种半的可能性:
- 使用支持模拟的测试框架(我相信 google 测试支持)。
- 在测试上下文中通过一些丑陋的宏 hack (
#define
) 重新定义 libc 函数 (fprintf()
和exit()
)。 - 也许您可以通过以某种方式为
fprintf()
设置文件句柄来做一些丑陋的黑客攻击,以便您可以读取输出以对其进行断言。但是你仍然剩下那个exit()
电话。
了解模拟以及如何编写可测试代码。您的代码很难测试。不一定是。