Mor*_*haw 6 c++ unit-testing visual-studio-2012
我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试。
这是我的测试:
TEST_METHOD(CalculationsRoundTests)
{
int result = Calculations::Round(1.0);
Assert::AreEqual(1, result);
}
Run Code Online (Sandbox Code Playgroud)
导出类:
#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);
Run Code Online (Sandbox Code Playgroud)
函数本身:
int Calculations::Round(const double& x)
{
int temp;
if (floor(x) + 0.5 > x)
temp = floor(x);
else
temp = ceil(x);
return int(temp);
}
Run Code Online (Sandbox Code Playgroud)
但是,测试几乎总是失败,错误代码为 c0000005(访问冲突)。第一次使用 x 或可能在函数中声明的任何其他变量时,测试将失败。
我一直不明白为什么测试在运行时会导致访问冲突;但是,我确信我设置错误。
为了消除此错误,我更改了 Visual Studio 解决方案的结构,使大部分代码位于静态库 (.lib) 项目中,该项目将包含我的程序的实现。通过这样做,项目中程序的所有类和函数都会自动导出,因此我不需要使用 __declspec(dllexport)。
然后,我创建了一个小型 Win32 控制台应用程序,它将为我的程序创建引用 .lib 项目的 .exe 文件。该项目的目的是为我的程序创建可执行文件,因此它需要的只是一个 main 来调用 .lib 项目中代码的开头。
完成此操作后,我只需让本机单元测试项目引用 .lib 项目就可以轻松工作,从那以后我就没有遇到任何访问错误。
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |