我的项目包含C文件。 在某些文件中,我将函数定义为static。

我在单元测试中使用CppUnit,我想测试这些静态函数。 我知道不允许从文件外部(它定义的地方)调用函数。 有没有解决方案来避免这个问题,以便从我的C ++测试文件中调用这些静态函数?

===============>>#1 票数:6 已采纳

假设我们正在谈论C静态函数,那么最简单的解决方案是在编译调试版本时使函数非静态。 这意味着符号可供您在单元测试中使用。 这仅在没有符号别名的情况下有效。

如果在所有调试版本上定义符号DEBUG ,则类似于:

#ifdef DEBUG
#define debug_export 
#else
#define debug_export static
#endif

然后定义这样的静态函数

debug_export void foo(void)
{
...
}

并在头文件中有条件地包含声明或在单元测试文件中手动导入它们:

extern void foo(void);

围绕它的其他方法是在源文件本身中包含单元测试(如果它失控,有点混乱),不打扰单元测试功能(一点副作用)或标记功能作为dll-local而不是static,并确保您的单元测试是该动态对象的一部分。

===============>>#2 票数:4

我有一个公共头文件,我包含在我的项目的所有源文件中。 我添加了这些行,问题解决了:

#ifdef TEST
#define static
#endif

我甚至可以避免在我的原始C代码中添加上面的代码。 我可以在gcc命令中添加标志-Dstatic= ,我发现它也有效。

但是在使用此解决方案时我们必须小心,因为:

  • 我们可以在2个单独的文件中将相同的变量/函数名称定义为static。
  • 我们可以有一个包含一个定义为static的变量的函数。

===============>>#3 票数:1

有没有办法重构代码以消除对静态方法的需求? 从OO设计的角度来看,静力学是羊皮的全球化。

我知道这不一定是实用或最快的答案,但你会通过消除它来改进你的设计。

  ask by MOHAMED translate from so

未解决问题?本站智能推荐:

2回复

CUnit - '模拟'libc函数

我正在使用CUnit进行项目单元测试。 我需要测试我是否使用正确的参数调用libc函数以及我是否以正确的方式处理它们的返回值。 例如:如果我调用bind(...)函数 - 我想检查哪个af param我传递并断言如果这是错误的,并且我想模拟它的返回值并断言如果我检查它正确的方式。 出于
1回复

使用现有项目进行CppUnit测试

我是CppUnit测试的新手,并且有一些基本问题。 因此,CppUnit测试需要运行一个主要功能。 但是,我希望这个主体与我要测试的项目的主体分开。 因此,由于在一个项目中不能拥有2个主要功能,所以我创建了一个子项目(顺便说一句,我正在使用Qt),该子项目将容纳所有测试类。 但是,这
3回复

使用CppUnit链接测试库

我正在使用CppUnit设置一堆单元测试,但我遇到的问题是没有运行任何测试。 该项目分为几个小型库,我计划以相同的方式划分单元测试类,然后将它们全部链接到一个测试程序中。 问题是,然后测试类在他们自己的库中,他们没有链接到主测试程序,除非我明确地调用它们,即我必须放入 runner.ad
7回复

使用CppUnit参数化测试

我的组织正在使用CppUnit,我正在尝试使用不同的参数运行相同的测试。 在测试中运行循环不是一个好选择,因为任何失败都会中止测试。 我看过TestDecorator和TestCaller但似乎都不合适。 代码示例会很有帮助。
1回复

在CPPUnit中使用测试套件属性的示例是什么? (CPPUNIT_TEST_SUITE_PROPERTY)

我加入了一个CPPUnit用于单元测试的项目,并将添加一些可能共享设置和拆卸代码的测试。 在研究这个问题时,我遇到了 (来自https://people.freedesktop.org/~mmohrhard/cppunit/group___writing_test_fixture.ht
2回复

在DLL上使用CppUnit运行单元测试

我有一个Visual Studio项目,其中包含我们模块之一的CppUnit测试用例。 该项目在构建时会创建一个dll(类似于ModuleUnitTest.dll)。 我没有得到如何运行这些测试的信息? CppUnit中是否有可用的现成存根,可以从此dll读取并运行测试? 还是我必须自己
1回复

cppUnit:setUp函数针对多个测试方法执行一次

我有一个对象Obj在进行一些(复杂的)计算,并且想要检查天气结果(我们称其为aComputed和bComputed )是否正确。 因此,我想将此任务分为多种测试方法: 问题在于, Obj被“执行”两次(这需要很多时间)-每次测试一次。 问题是:如何管理它仅被“执行”一次并且结果被两个
1回复

CPPUNIT:通用基础测试

我想知道一种用于测试基类的有效设计或实现。 给出示例: 其中Rectangle和Triangle从Polygon继承。 我想让Rectangle和Triangle的测试类使用基本测试类: 但是我不知道class Test_Polygon是否应该从CppUnit::Tes
2回复

CppUnit创建一个简单的测试

首先,如果我想设置一个测试,我使用的类是什么: 好像要使用的类是TestSuite? 所以现在我创建了一个非常简单的类: 及其对应的cpp: 我收到CPPUNIT_TEST_SUITE线上的“ 预期声明 ”等错误......看起来与我来自的地方非常不同...更多现
3回复

如何运行CPPUnit单元测试

我已经使用CPPUnit编写了一些c ++单元测试。 但是我不知道如何运行那些。 有没有像Nunit-gui这样的工具? 目前,我已经在DLL中编写和打包了测试。 当我在Google上搜索时,我发现了这个http://cppunit.sourceforge.net/doc