使用本机单元测试项目在 Visual Studio 2017 中对 C 代码进行单元测试
Posted
技术标签:
【中文标题】使用本机单元测试项目在 Visual Studio 2017 中对 C 代码进行单元测试【英文标题】:Unit testing C Code in Visual Studio 2017 with Native Unit Test Project 【发布时间】:2018-06-07 08:57:34 【问题描述】:我想在 Visul Studio 2017 中为 C 项目进行单元测试。它是一个嵌入式项目库。我希望对 lib 进行尽可能少的更改。只需在VS中编译c代码我已经添加了一些#ifdef WIN32。可以再添加一些。
从使用 Visual C++ 本机单元测试项目开始。但是当想要从 C 文件测试私有静态函数并在项目中注入值变量时会遇到问题。
-
将我的嵌入式项目作为静态库包含到 VS 解决方案中。 (或者应该使用动态链接库或其他东西?)
创建了本机单元测试项目,并将其命名为 UnitTest1。
在 UnitTest1 中添加了这一行,据我了解它将包括我想要测试的库。
#pragma comment(lib, "../Release/Embedded.lib")
在嵌入的代码头文件中,我添加了这个宏来创建我将执行测试的库。
#pragma once
#ifdef EXPORT_TEST_FUNCTIONS
#define UNITTEST_Embedded_EXPORT __declspec(dllexport)
#else
#define UNITTEST_Embedded_EXPORT
#endif
inline UNITTEST_ZAP_EXPORT static bool isActiv(void);
-
在嵌入的C文件中,我添加了这一行
#define EXPORT_TEST_FUNCTIONS
和这个函数:
UNITTEST_ZAP_EXPORT static bool isActiv();
return false;
-
但是当我构建 UnitTest1 得到错误 LNK2001。
非常不确定如何继续使其工作。谁能指导我解决我的问题?我希望能够测试 C 代码中的所有函数。希望它不难理解需要什么帮助。我才发展了几年。
【问题讨论】:
What is an undefined reference/unresolved external symbol error and how do I fix it?的可能重复 【参考方案1】:我和你有同样的问题。您需要向 Visual Studio 中的 C++ 编译器说明,当您包含 C 函数的声明时,会出现 C 标头。所以你的UnitTest1.cpp
应该以:
extern "C"
#include "somecode.h"
static_lib1.h
应该包含类似:
#ifndef STATIC_LIB1_H_
#define STATIC_LIB1_H_
SWord doSomeThing();
#endif
删除在 h 和 c 文件中添加的所有额外代码以进行单元测试,它不应该是必需的。最好的单元测试是不要对你测试的代码做任何更改,因为单元测试需要它。
我确定这应该可以解决您的问题。
【讨论】:
以上是关于使用本机单元测试项目在 Visual Studio 2017 中对 C 代码进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中正确链接文件以运行本机测试?
无法在 Visual Studio 2017 中构建我的单元测试项目
如何在Visual Studio项目和单元测试项目之间建立联系?