我正在尝试使用本机单元测试项目在Visual Studio 2012中创建单元测试。
这是我的测试:
TEST_METHOD(CalculationsRoundTests)
{
int result = Calculations::Round(1.0);
Assert::AreEqual(1, result);
}
导出班级:
#ifdef EXPORT_TEST_FUNCTIONS
#define MY_CALCULATIONS_EXPORT __declspec(dllexport)
#else
#define MY_CALCULATIONS_EXPORT
#endif
...
class CALCULATIONS_EXPORT Calculations {
...
public:
static int Round(const double& x);
功能本身:
int Calculations::Round(const double& x)
{
int temp;
if (floor(x) + 0.5 > x)
temp = floor(x);
else
temp = ceil(x);
return int(temp);
}
但是,测试几乎总是失败,错误代码为c0000005(访问冲突)。 第一次使用x或函数中可能声明的任何其他变量时,测试将失败。
我按照Unresolved externals when compiling unit tests for Visual C++ 2012
上的说明操作答案 0 :(得分:0)
我从未弄清楚为什么测试在运行时会导致访问冲突;但是,我确定我错了。
要删除此错误,我更改了Visual Studio解决方案的结构,使大部分代码都在静态库(.lib)项目中,该项目将包含我的程序的实现。通过这样做,项目中我的程序的所有类和函数都会自动导出,因此我不需要使用__declspec(dllexport)。
然后,我创建了一个小的Win32控制台应用程序,它将为我的程序创建引用.lib项目的.exe文件。这个项目的目的是为我的程序创建可执行文件,所以它只需要一个main来调用.lib项目中代码的开头。
在我这样做之后,我能够通过让它也引用.lib项目来轻松地使Native Unit Test项目工作,而且我从未遇到任何访问错误。
答案 1 :(得分:0)