如何借助 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 函数。因此我看到了两种半的可能性:

  1. 使用支持模拟的测试框架(我相信 google 测试支持)。
  2. 在测试上下文中通过一些丑陋的宏 hack (#define) 重新定义 libc 函数 (fprintf()exit())。
  3. 也许您可以通过以某种方式为 fprintf() 设置文件句柄来做一些丑陋的黑客攻击,以便您可以读取输出以对其进行断言。但是你仍然剩下那个 exit() 电话。

了解模拟以及如何编写可测试代码。您的代码很难测试。不一定是。