0

大家好,我是 Cunit 的新手。我的问题在代码下方,因此您可以根据需要跳过它。我做了一个小函数,将两个正整数相加并返回结果,如果任何整数小于或等于零,那么它会向 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*/
}

我应该在指定的部分添加什么,以便我的代码也被测试是否有错误消息?

4

1 回答 1

1

您的代码中的错误案例是一个棘手的案例。它不是为测试而设计的。它直接调用 libc 函数,更糟糕的是,它正在调用exit(). IIRC CUnit 不支持模拟 libc 函数。因此,我看到了两种半可能性:

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

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

于 2021-02-28T23:29:07.950 回答