【发布时间】:2018-06-20 11:39:00
【问题描述】:
我正在对 c 代码进行功能测试。到目前为止,在测试 .cpp 文件中包含 .c 文件,一切正常。但是我需要在另一个 .cpp 文件中包含相同的 .c 文件,我会在其中进行其他单元测试。然后我得到已经定义的问题。因为我已经将它包含在第一个文件 cpp 中了。
如果将所有测试方法合并到一个 cpp 文件中,则效果很好。如果将所有单元测试保存在一个文件中得到大处理,那么我需要在同一个项目中拆分不同的文件,它还会创建帮助函数以确保函数进入胶囊。
这不是正常的 LNK2005,因为我无法在 .h 中声明变量和函数: as extern BOOL MyBool;然后在 .c 或 .cpp 文件中分配给它。因为需要包含 c 文件,因为我对这个函数进行单元测试。我也不能或应该避免做任何改变.c.
我想办法让 .c 本地包含不影响同一项目中的其他文件。
source.h
#ifndef SOURCE_H_
#define SOURCE_H_
#include "../car.h"
enum INITIALMODE {
INITIALMODE_NOT_POSITIONING, // 0
INITIALMODE_NO_DRIVER_INPUT, // 1
INITIALMODE_POSITION_LOW_POSITION, // 2
INITIALMODE_POSITION_STANDARD_POSITION, // 3
INITIALMODE_POSITION_HIGH_POSITION // 4
};
void initMotor(void);
#endif
source.c
/* Compiler include files */
#pragma once
#include "positioning.h"
#include "api.h"
#include "drive.h"
#include "types.h"
static void updateTarget(void);
static SWord getMax(UWord Limit, UWord Aux);
static DWord getHeight(void);
static Bool isMode(void);
static Bool isExiting(void);
#define cMaxHeight 100 * Profile.s.Max /* m -> mm */
void initMotor(void)
{
// do something
}
static void updatePositioning(void)
{
// do something
}
测试文件看起来像这样,但是,这非常适合使示例变小。
UnitTest.cpp 和 UnitTest2.cpp
#include "CppUnitTest.h"
#ifndef UNIT_TEST
#define UNIT_TEST
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace Test
{
extern "C" {
#include "../../Test/source.h"
#include "../../Test/source.c"
}
TEST_CLASS(UnitTest_1)
{
public:
TEST_METHOD(Test_1)
{
// Verify that the initial state is as expected.
initTest();
//Expected value
UWord Expected = 500
//Trigger to execute.
UWord Test = updatePositioning();
// Verify that the results are as expected.
Assert::AreEqual(Expected, Test);
}
};
}
#endif
【问题讨论】:
-
抱歉,没有注意到另一个问题也是你,只是它似乎在问同样的问题。在这里重新开放。
-
无论如何,您都不应该包含
*.c或*.cpp文件。如果你在多个翻译单元中使用一些变量/函数/类,你应该首先在标题中声明它们。 -
@YoungDevelopers,请编辑您的问题以包含一些您希望测试的示例代码,我将解释如何测试它。我不想写一个你可能不清楚的答案。
-
您问如何在多个 .cpp 文件中测试功能?为什么不简单地编译您的 .c 文件,并将 .h 包含在您的 .cpp 文件中?请注意,如果您在 c++ 中测试 c 代码,还有其他问题需要考虑,但我同意 @Ptaq666 的观点,即您永远不应包含 .c 或 .cpp 文件。
标签: c++ c unit-testing